基于创龙TL5728F-EVM-A3开发板,在MLO、u-boot、内核全程点亮LED1
《一》 查看底板原理图,LED1 对应 GPIO 管脚是 GPIO3_19,与 VIN1A_D15 复用
查看 TRM数据手册
《二》 MLO (u-boot 第一阶段) 要完成: 1、配置 GPIO3_19 的 pinmux 2、设置 GPIO3_19 输出高电平
在U-Boot源码 arch/arm/mach-omap2/hwinit-common.c文件中添加如下代码
204 #defineAM572X_CTRL_MODULE_CORE_BASE 0x4A002000 205 #defineAM572X_VIN1A_D15_MUXMODE_OFFSET 0x1530 206 #defineAM572X_VIN1A_D15_MUXMODE_GPIO3_19 0xE 207 208 #defineAM572X_GPIO3_BASE 0x48057000 209 #defineAM572X_GPIO_OE_OFFSET 0x134 210 #define AM572X_GPIO_SETDATA_OUT_OFFSET 0x194 211 212 void Test_tl5728f_evm_a3_led1_on(void) { 213 u32 reg_val; 214 215 /* TL5728F-EVM-A3LED1: set VIN1A_D15 to GPIO3_19 Mode */ 216 reg_val =__raw_readl(AM572X_CTRL_MODULE_CORE_BASE + AM572X_VIN1A_D15_MUXMODE_OFFSET); 217 reg_val &=((2^32) - 1) << 4; 218 reg_val |=AM572X_VIN1A_D15_MUXMODE_GPIO3_19; 219 __raw_writel(reg_val,AM572X_CTRL_MODULE_CORE_BASE + AM572X_VIN1A_D15_MUXMODE_OFFSET); 220 221 /* TL5728F-EVM-A3LED1: set gpio3_19 to output enable */ 222 reg_val =__raw_readl(AM572X_GPIO3_BASE + AM572X_GPIO_OE_OFFSET); 223 reg_val &=~(BIT(19)); 224 __raw_writel(reg_val,AM572X_GPIO3_BASE + AM572X_GPIO_OE_OFFSET); 225 226 /* TL5728F-EVM-A3LED1: set gpio3_19 to high level */ 227 reg_val =__raw_readl(AM572X_GPIO3_BASE + AM572X_GPIO_SETDATA_OUT_OFFSET); 228 reg_val|= BIT(19); 229 __raw_writel(reg_val,AM572X_GPIO3_BASE + AM572X_GPIO_SETDATA_OUT_OFFSET); 230 } 232 233 #ifdef CONFIG_SPL_BUILD 234 void board_init_f(ulong dummy) 235 { 236 early_system_init(); 237 238 Test_tl5728f_evm_a3_led1_on(); 239 240 #ifdef CONFIG_BOARD_EARLY_INIT_F 241 board_early_init_f(); 242 #endif 243 /* For regular u-bootsdram_init() is called from dram_init() */ 244 sdram_init(); 245 gd->ram_size =omap_sdram_size(); 246 } 247 #endif
《三》 u-boot(第二阶段) 运行过程中未对 GPIO3_19 做任何操作,固不需改动
《四》 kernel 阶段 在 kernel 启动过程中会对 GPIO 等硬件做 reset 操作,并且在加载 LED 驱动时会对 GPIO 操作。固在设备设备树中做相应配置 修改文件:arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi LED 驱动加载的时候GPIO3_19 保持高电平 125 led2{ 126 label= "user-led0"; 127 gpios= <&gpio3 19 GPIO_ACTIVE_HIGH>; 128 default-state= "on"; 129 };
内核初始化对硬件 RESET 时,不要对 GPIO3 进行操作 805 &gpio3 { 806 ti,no-reset-on-init; 807 ti,no-idle-on-init; 808 };
|