GPIO1_16 ~ GPIO1_20做为输出口
用ANAD启动,正常
用JINK防真SD卡启动程序,也是正常的
放到SD卡后启动,GPIO1_16 ~ GPIO1_20做为输出口就没有反应了
程序全是AM335X_StarterWare demo
SD卡后启动程序没有做修改
想不能为什么会这样
请指教
===
经我测试,当我把开关拨到SD卡启动时,这时不放卡
会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了,和SD卡启动现象一样
当开关拨到NAND启动时,一切正常
不管启动怎么选,APP函数是一样的,同一个函数
不同启动是不是还要修改其它的地方吗?启动函数都是DEMO中的,我没修改过
Steven Liu1:
查了GPIO的pinmux配置没有?
先确认你目前的这些GPIO的pinmux配置是正确的再检查GPIO模块的配置,从control module寄存器里面可以查到相应信息。
xblzy0423 xblzy0423:
回复 Steven Liu1:
pinmux配置是正确,
经我测试,当我把开关拨到SD卡启动时,这时不放卡
会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了,
和SD卡启动现象一样
当开关拨到NAND启动时,一切正常
不管启动怎么选,APP函数是一样的
不同启动是不是还要修改其它的地方吗?启动函数都是DEMO中的,我没修改过
Steven Liu1:
回复 xblzy0423 xblzy0423:
没看懂这个意思。你对GPIO口的操作,是在你的application里面操作的吗?
启动的时候,芯片会根据你的boot模式的选择,配出一个pinmux,来使能你启动序列中的设备接口。在MLO执行完了,开始执行app后,这时候才能运行到你自己对pinmux的配置,以及对GPIO口的控制。使用哪种启动方式,不会影响到你app中的设置,除非是某些pin脚你没有配置,沿用了初始值,才会有影响。
Steven Liu1:
回复 xblzy0423 xblzy0423:
经我测试,当我把开关拨到SD卡启动时,这时不放卡
会自动跳到NAND启动,但这时上面那几个GPIO口也不正常了
这里GPIO不正常了,指出现了什么现象?正常的现象是怎样的?
xblzy0423 xblzy0423:
回复 Steven Liu1:
GPIO不正常了,就是说它不工作了
我现在接的是GPIO_16接LED ,让LED跳变(4秒一次)
我现在接的是GPIO_20接KEY ,用中断,
同一个app,(NAND启动时把它下载到NAND FLASH中)
1:用NAND 启动 LED跳变,KEY 也用正常中断,执行中断函数,说明我的GPIO口配的是对的
2:用SD卡启动 LED没反应,KEY 进不了中断,按下反应,其它功能都是好的,如触摸等
3:用防真器防真MLO文件(看APP从SD卡中载正常),LED跳变,KEY 也用正常中断,
4:开关拨到SD卡启动时,这时不放卡会自动跳到NAND启动,启动后 LED没反应,KEY 进不了中断,按下反应,其它功能都是好的,如触摸等
请指都
启动文件都是DEMO中的,没有做修改
xblzy0423 xblzy0423:
回复 xblzy0423 xblzy0423:
我把GPIO1_16的程序放到SD卡启动中,也是JLINK防真是好的,led在ImageCopy()这前是亮的
用SD卡启动就不对了,led没有反应
请帮忙看一下那儿错了
附:
#define LED_OFF GPIO_PIN_HIGH #define LED_ON GPIO_PIN_LOW
#define CONTROL_CONF_PULLUDDISABLE 0x00000008 #define CONTROL_CONF_PULLUPSEL 0x00000010#define CONTROL_CONF_RXACTIVE 0x00000020 #define CONTROL_CONF_SLOWSLEW 0x00000040#define CONTROL_CONF_MUXMODE(n) (n)
/* Slow Slew Rate – Receiver Disabled – Pullup – PU/PD feature Enabled. */#define PAD_SL_RXD_PU_PUPDE(n) (CONTROL_CONF_PULLUPSEL | \ CONTROL_CONF_RXACTIVE | \ CONTROL_CONF_MUXMODE(n))
#define LED_INST_BASE_ADD (SOC_GPIO_1_REGS)
#define GPIO_1_4 (0x0810)
#define GPIO_LED4_OffSETADDR GPIO_1_4
GPIO1ModuleClkConfig();//DEMO中的,我没做修改 /* Doing a pin multiplexing and selecting led for use. */ GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7)); GPIOModuleEnable(LED_INST_BASE_ADD); GPIOModuleReset(LED_INST_BASE_ADD); /* Configuring led pin as an output pin. */
GPIODirModeSet(LED_INST_BASE_ADD,GPIO_LED4_PIN_NUM,GPIO_DIR_OUTPUT);
/* Driving LED pin to logic Low. */ GPIOPinWrite(LED_INST_BASE_ADD,GPIO_LED4_PIN_NUM,LED_ON); //LED 亮
Steven Liu1:
回复 xblzy0423 xblzy0423:
我描述一下你现在的问题,看看有啥误解没有,你现在的pinmux配置以及GPIO的LED点亮工作,还有key中断的响应这些操作,都是在你的app中进行设置的是吗?
SD或者NAND启动的时候,是先运行MLO,再运行app的。然后,在不同的启动模式下,你使用的是相同app的,但是gpio的反应结果却不一样,也就是你说的上面的问题,对吗?
这里面,在SD卡启动和NAND启动的时候,在app中能否加入打印,确保你的app正常执行了?
Steven Liu1:
回复 xblzy0423 xblzy0423:
这段代码里面的pinmux设置被注释了?//GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7)); 这样,你使用Jlink仿真的时候,注意查一下control module寄存器的值,目前你使用的是GPIO_1_4的话,在你的led灯亮和不亮的时候,查一下0x44e10810地址的值,确认他是不是0x27。
你使用的GPIO_1_4这个pin脚和gpmc_ad4是复用的,如果是nand启动的话,gpmc_ad4可能会被配成模式0,来使能NAND。在后面的过程中,也可能会发生更改,所以一定要确认你的pinmux配置模式是7,而且后面没有更改,才能保证这个口一直被用作GPIO。
xblzy0423 xblzy0423:
回复 Steven Liu1:
1:GpioPinMuxSetup(GPIO_LED4_OffSETADDR, PAD_SL_RXD_PU_PUPDE(7));这句我是发贴是不小心注掉的,程序中是有的
2:你描述问题是对的
3:app搞定运行了,因为APP中还有其它东西,如 LCD
4:你看到的这点程序,本来是APP中的,我现在放到MLO(SD卡启动)文件中,Jlink仿真MLO文件时led灯亮,正常运行,地址中的值也是对的
但把MLO文件下载到SD卡,用SD卡启动时就不正常,LED不亮,很怪,\
SD卡启动时串口取地址值如下:
0x44E10000+0x0810 =0x27
0x4804C000+0x134=0xfffeffff
0x4804C000+0x190=0x00 // LEN_ON
0x4804C000+0x194=0x10000 //LED OFF
看了值感觉都是对的,
GPIO1_16~ GPIO1_24 做I/0用都在此时不对,是不是与GPMC有关地方我没设置对?
xblzy0423 xblzy0423:
回复 xblzy0423 xblzy0423:
问题可能出象在当检测到SD卡启动后,
发现有GPIO1 所有I/0有一个置“高”动作,可能做了设置,由此引起有些寄存器值改变
这是在运行到MLO中main之前的,而仿真时没有这个置“高”动作,所以仿真是好的
我现在就是不知道在那个地方做这个置“高”动作的,改变了那些寄存器值
NAND启动也没有这个动作,所以它运行也是正常的