//========================================================================
//TITLE:
// Sigmatel37xx GPIO的使用
//AUTHOR:
// norains
//DATE:
// Thursday 21-August-2008
//Environment:
// NONE
//========================================================================
在文章开篇之前,先小小抱怨一下。Sigmatel的硬件部分做得不错,这个是必须承认的;但WinCE的软件部分,却不能不让人抓狂。用一句
黑话来说,就是见过烂的,没有见过这么烂的:条理杂乱无章,结构模糊不清,更不用说那些莫名其妙的BUG了。以GPIO为例子,其实在
Sigmatel 37xx BSP包已经有驱动,但实际上只是一些代码而已,没有注册表,没有PB选项,换句话说,你根本无法通过简单的设置来使用GPIO
驱动。
如果想控制GPIO,那么唯一的办法就是直接对寄存器进行读写。
首先我们必须要做的就是,包含头文件:regspinctrl.h。不过这个可得小心了,因为这文件有两个,一个位于:/SRC/INC/37xxRegs,另
一个则是在/SRC/SOCFirmware/include/37xx/registers。并且这不同位置的文件的开头描述都是一样的,但实际上在宏定义方面区别还挺大,
从而导致包含不同的regspinctrl.h,程序代码就有不同的写法。弱弱地感叹一下,不能不拜服sigmatel的方式。
在这里为了简便起见,我们用的是/SRC/INC/37xxRegs/regspinctrl.h。
首先,在使用之前,我们必须映射一下内存地址:
static PVOID pv_HwRegPinCtrl;
static PHYSICAL_ADDRESS PhysAddr;
PhysAddr.QuadPart = _PA_REGS_PINCTRL_BASE;
pv_HwRegPinCtrl = (PVOID) MmMapIoSpace(PhysAddr, 0x1000, FALSE);
if ( pv_HwRegPinCtrl == NULL)
{
RETAILMSG(1, (TEXT("Failed to map device registers /r/n")));
return FALSE;
}
如果提示找不到PHYSICAL_ADDRESS的声明,请先包含ceddk.h。在这里还有一点需要提醒一下的是,pv_HwRegPinCtrl变量只能用该名字,
并且作用域是全局的,否则在接下来的宏使用中会编译无法通过。
在对GPIO进行操作之前,我们先了解如下几个宏:
REG_HW_PINCTRL_MUXSELx_SET : 设置pin的功能。
BF_PINCTRL_MUXSELx_BANKx_PINxx :将相应的pin功能转化为写入寄存器的数值。
REG_HW_PINCTRL_DOUTx_SET :输出high
REG_HW_PINCTRL_DOUTx_CLR :输出low
REG_HW_PINCTRL_DOEx_SET :输出使能
REG_HW_PINCTRL_DOEx_CLR :输入使能
REG_HW_PINCTRL_DINx_RD :如果PIN为输入,则该宏用来读取相应寄存器的数值。
宏中的x代表数字,对应相应的PIN。
现在以实际例子对pin做一次操作。
如果我们在datasheet中看到某个PIN有如下描述:
HW_PINCTRL_MUXSEL0 BANK0_PIN08
GPMI_D08 Pin Function Selection.
00 = GPMI_D8.
01 = EMI_ADDR15.
10 = Reserved.
11 = GPIO.
如果我们想令该PIN作为GPIO并输出high,那么代码如下:
REG_HW_PINCTRL_MUXSEL0_SET(BF_PINCTRL_MUXSEL0_BANK0_PIN08(3));
REG_HW_PINCTRL_DOUT0_CLR(1 << 8);
REG_HW_PINCTRL_DOE0_SET(1 << 8);
对应datasheet,我们就不难发现以上三个宏的x如何选择相应的数字,如图:
若是想将该pin作为输入,也是比较简单,样例代码如下:
REG_HW_PINCTRL_MUXSEL0_SET(BF_PINCTRL_MUXSEL0_BANK0_PIN08(3));
REG_HW_PINCTRL_DOE0_CLR(1 << 8); //设置为输入
if((REG_HW_PINCTRL_DIN0_RD() & (1 << 8)) != 0)
{
//Input high
}
else
{
//Input low
}
代码宏中数字的选择,可参考之前图片的解释,在此就不再详表。
分享到:
相关推荐
苹果笔记本1181驱动.Sigmatel 苹果笔记本1181驱动.Sigmatel 苹果笔记本1181驱动.Sigmatel
矽玛特 Sigmatel @ ATI IXP SB600/SB700/SB800 高保真音频 SigmaTel矽玛特STAC 92XX C-Major HD Audio 声卡驱动
网友们可以使用它快速解决因sigmatel声驱动损坏、丢失造成的系统声音消失问题。有需要的朋友可以下载使用。sigmatelaudio驱动介绍sigmatelhighdefinitionaudiocodec是矽玛特SigmaTel-声卡驱动,Sigmatel,欢迎下载...
西格SIGMATEL3502芯片原理图,与及其功能应用引入图解
Sigmatel方案的MP3,完整的整机电路图,PDF格式的。
sigmatel ARM926 里面使用的UART 通讯软件
BTX 硕泰克准系统 型号BS-1000 主板SL-B945G-L(华硕代工?)sigmatel声卡驱动,解决麦克风无声的问题。
SigmaTel SDK API Reference
HDAUDIO\FUNC_01&VEN;_8384&DEV;_7680&SUBSYS;...我也是重装系统后不能使用这型号的声卡的,现在可以正常使用了,重新装系统后坏了,找了半天才找到这个驱动,sigmatel high definition audio codec驱动。
MP3/MP4电源电路原理及维修 矩力方案3.6V供电电源电路介绍 矩力方案1.5V或1.2V供电电源电路介绍 MP3播放机常见故障解决方法 ......
很难找的gateway w340ui声卡驱动
矽玛特公司(SigmaTel,NASDAQ 交易代号:SGTL)宣布推出新一系列高保真高清晰(HD)音频编解码器(Codec),该系列产品支持数字麦克风功能,并能够直接在PC主板实现音频和调制解调器功能。 在这些新的音频解决方案...
模拟密集混合讯号集成电路开发商SigmaTel, Inc.宣布,为其D-Major:trade_mark:音效控制器产品提供低成本多层单元(MLC)闪存内存支持技术。其2.520版本软件开发套装使采用SigmaTel方案开发的可携MP3音效闪存播放器,...
Sigmatel 公司开发mp3/mp4的培训PPT
Sigmatel 公司开发mp3/mp4的培训PPT
模拟密集混合讯号集成电路开发商SigmaTel, Inc.宣布,为其D-Major:trade_mark:音效控制器产品提供低成本多层单元(MLC)闪存内存支持技术。其2.520版本软件开发套装使采用SigmaTel方案开发的可携MP3音效闪存播放器,...
矽玛特公司(SigmaTel)日前推出专门针对闪存和硬盘数字多媒体播放器的新型系统芯片(SoC)解决方案——STMP3600。它能够帮助客户以更低的整体系统成本,设计和开发出电池寿命更长、体积更小、且处理能力更强的数字...
新款的D-Major STMP35xx系列象征SigmaTel主动出击,踏入中国及远东等价格敏感市场重要的一步。MP3播放器市场不断增长,其中大部分销量,不论是现在或未来,都来自低档的零售产品。 STMP3502提供广泛的功能,...