现在的位置: 首页TI ARM>正文
TI AM335X GPIO笔记
2012年03月11日 TI ARM 暂无评论

基于TI AM335X,TI其他系列U也应该差不多
特性:
每个GPIO都可以通过GPIO_OE寄存器设置为输出模式
GPIO输出出是通过写入GPIO_DATAOUT寄存器实现
GPIO的输入可以经过一个硬件的去抖动配置
GPIO的数据输入是通过读取GPIO_DATAIN寄存器实现的
在主动模式下,GPIO的输入检测可以使用电平或是触发方式.在触发方式,可以检测上升沿与下降沿.
仅GPIO0可以唤醒设备

GPIO需要两个时钟源,de-bouncing时钟源用于消抖动(好像是使用的32K时钟),还有一个主时钟clk,一般是使用PLL的100M(CORE_CLKOUTM4/2).

GPIO的模式:
略...

常用GPIO寄存器:
管脚复用功能在CONTROL MODULE中设置,除了复用功能外,还有上下拉使能,接收使能及管脚速度.
GPIO功能寄存器在GPIO描术中有,其中常用的的有CLEARDATAOUT SETDATAOUT CTRL及OE还有中断状态也在这里设置

GPIO功能设置流程:也可以参见我的点灯日志beaglebone 点灯笔记
注要流程为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*   设置GPIO管脚复用模式  */
leds_devp->control_mode = ioremap_nocache(TIA8_CTRLMOD,0x2000);
__raw_writel(GPIO_GENERALLY,leds_devp->control_mode+CONF_GPMC_A5);	//配置默认GPIO管脚功能
__raw_writel(GPIO_GENERALLY,leds_devp->control_mode+CONF_GPMC_A6);
__raw_writel(GPIO_GENERALLY,leds_devp->control_mode+CONF_GPMC_A7);
__raw_writel(GPIO_GENERALLY,leds_devp->control_mode+CONF_GPMC_A8);	
iounmap((void *)(leds_devp->control_mode));
 
/*   设置GPIO使能及允许输出  */
leds_devp->base = ioremap_nocache(TIA8_GPIO1_PA,0x200);	
__raw_writel(0,leds_devp->base+TIA8_GPIO_CTRL);			// 使能GPIO功能
temp = __raw_readl(leds_devp->base+TIA8_GPIO_OE);		// 设置充许输出
temp&=(~(LED1|LED2|LED3|LED4));
__raw_writel(temp,leds_devp->base+TIA8_GPIO_OE);	
iounmap((void *)(leds_devp->base));
/*  最后就可以直接操作寄存器进行IO控制了  */
__raw_writel(LED1,((leds_devp->base)+TIA8_GPIO_CLEARDATAOUT));
__raw_writel(LED2,((leds_devp->base)+TIA8_GPIO_SETDATAOUT));


给我留言

留言无头像?


无觅相关文章插件,快速提升流量