请教专家.:
3个GPIO 设置如下:
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;
原来都是低电平. 如果这样:
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
GPIO10为高电平.另外两个还是低电平.
改成这样
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
DELAY_US(1);
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
DELAY_US(1);
都是高电平.电平反过来也一样.这是怎么回事呀.是芯片问题吗?
QIUPING GUO:
回复 Eric Ma:
Eric
按你说的修改了.我具体是TMS32F2812和F28335连接如下:.
GPIO8 <->GPIOA1; GPIO10<->GPIOA2
代码如下:
F28335端
GpioDataRegs.GPACLEAR.bit.GPIO8 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;
……………………….
GpioDataRegs.GPASET.bit.GPIO8 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;
F2812端:
interrupt void MY_XINT2_ISR(void)
{
if (GpioDataRegs.GPADAT.bit.GPIOA1 == 1)
{
GpioDataRegs.GPBSET.bit.GPIOB6 = 1; // TO F335_XINT3
/ / READ XINTF 0x0E1000
GpioDataRegs.GPBCLEAR.bit.GPIOB6 = 1; // TO U1_XINT1 }
if (GpioDataRegs.GPADAT.bit.GPIOA2 == 1)
{
XINTF_BUFF = 0;
}
}
问题是有时可以,有时不行.开始仿真时可以,再次仿真就不行.不行时观察.GPADAT.bit.GPIOA1 和 .GPADAT.bit.GPIOA2 一直不会改变.F2812程序运行判断结果与观察相符.F28335的 GPIO8,和 GPIO10 输出电平的改变是由F2812端引发. 中断请求信号是由F28335发出.从F2812端程序运行情况看.F28335断程序运行正常.(采用写DAT寄存器的方法结果也一样).为什么会这样.是做法不对还是别的原因.请给予指教.谢谢
请教专家.:
3个GPIO 设置如下:
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;
原来都是低电平. 如果这样:
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
GPIO10为高电平.另外两个还是低电平.
改成这样
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
DELAY_US(1);
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
DELAY_US(1);
都是高电平.电平反过来也一样.这是怎么回事呀.是芯片问题吗?
Eric Ma:
回复 QIUPING GUO:
QIUPING,
我觉得你先分开调试,先用F28335设置GPIO8,10的电平,然后观察GPIOB6的变化,再做下一步的测试。
我认为主要是要小心GPIODAT的读修改写指令就可以了。
Eric
请教专家.:
3个GPIO 设置如下:
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;
原来都是低电平. 如果这样:
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
GPIO10为高电平.另外两个还是低电平.
改成这样
GpioDataRegs.GPADAT.bit.GPIO10 = 1;
GpioDataRegs.GPADAT.bit.GPIO7 = 1;
DELAY_US(1);
GpioDataRegs.GPADAT.bit.GPIO8 = 1;
DELAY_US(1);
都是高电平.电平反过来也一样.这是怎么回事呀.是芯片问题吗?
QIUPING GUO:
分开调试也是一样的.看来只能改变控制方式了.