|
“简简单单DSP”系列学习活动——第三期之GPIO
2812的I/O口都设为功能共享的,所以在使用IO的时候就要根据自己所需设置IO。
1、GPxMUX寄存器
通用输入输出多路选择寄存器I/O是工作在通用数字IO还是外围IO信号引脚就有GPxMUX决定。
GPxMUX.bit.xx=0,xx通用数字IO;
GPxMUX.bit.xx=1,xx外围IO引脚。
2、GPxDIR寄存器 方向选择寄存器
如果配置为通用数字IO脚,那么GPxDIR决定了该引脚是输入还是输出。
GPxDIR.bit.xx=0,xx配置为输入;
GPxDIR.bitxx=1,xx配置为输出。
3、GPxQUAL寄存器 设置采样脉冲寄存器
在配置为通用数字IO后,DSP的数字IO引脚有对输入过滤噪声的功能,即对IO输入电平采样,在采样设置的次数后都是一个电平,才会确定有效。假如设置为输入高电平,采样10次,那么这10都为高电平才认为输入高有效,GPxDAT寄存器相应位才会改变。
它是一个16位的寄存器,低八位有效。
GPxQUAL=0; 与SYSCLKOUT同步,没有限制作用
GPxQUAL=1;
2个SYSCLKOUT周期采样,
GPxQUAL=2;
4个SYSCLKOUT周期采样,
GPxQUAL=0xff;510个SYSCLKOUT周期采样,
4、GPxSET置1寄存器
每个IO口有一个置1寄存器,只能写不能读,也就是只能用在输出上,写1可以使输出为1,写0没有变化。
GPxSET .bit.xx=0,被忽略;
GPxSET .bit.xx=1,且引脚配置为输出,则输出变高
5、GPxCLEAR清0寄存器
每个IO口有一个清0寄存器,只能写不能读,也就是只能用在输出上,写1可以使输出清0,写0没有变化。
GPxCLEAR .bit.xx=0,被忽略;
GPxCLEAR .bit.xx=1,且引脚配置为输出,则输出清0
6、GPxTOGGLE 翻转寄存器
每个IO口有一个翻转寄存器,只能写不能读,也就是只能用在输出上,写1可以使输出翻转,写0没有变化。
GPxTOGGLE .bit.xx=0,被忽略;
GPxTOGGLE.bit.xx=1,且引脚配置为输出,则输出翻转
7、GPxDAT寄存器
IO数据寄存器
每个IO都有一个数据寄存器,当IO配置为输出时,相GPxDAT中写数据就可以决定输出状态;
GPxDAT.bit.xx=0,输出变低;
GPxDAT.xx=1,输出变高
当IO配置为输入时,读取GPxDAT中的数据就可以决定输入状态;
注意:当引脚配置为通用数字IO时,相应的外围功能必须屏蔽,否则可能会引发不必要的中断
8、IO口C代码分析
在库函数DSP281x_Gpio.c中有GPIO的初始化的子函数void InitGpio(void),这个可以在主函数里面调用,也可以自己写,下面以void InitGpio(void)为例:
void InitGpio(void)
{
EALLOW;
/*GPxMUX寄存器设置,此例为设置A口为数字IO*/
GpioMuxRegs.GPAMUX.all=0x0000;
/*GPADIR寄存器设置,此例设置A口的低八位为输入,高八位为输出*/
GpioMuxRegs.GPADIR.all=0xFF00;
/*GPAQUAL输入限制设置*,此处屏蔽输入设置/
GpioMuxRegs.GPAQUAL.all=0x0000;
EDIS;
}
改变IO输出状态时,可以直接写GPxDAT,以上面设置为例:
GpioDataRegs.GPADAT.bit.GPIOA0=0;则输出变低
读IO口的状态:
首先设置一个读的变量: unsigned char IO;
IO=GpioDataRegs.GPADAT.bit.GPIOA9;
大家可以结合上两期的内容,写一个简单的流水灯程序,观察实验现象哦~!
AQUA小组祝您成功
[ 本帖最后由 superwangyang 于 2009-10-11 21:40 编辑 ]
|
|