[求助] Tiva TM4C123GXL单片机软件模拟IIC问题

spuer_liu   2019-4-22 11:35 楼主
需要实现用TM4C通过IIC读取数据,,,硬件不好移植然后自己写了个软件的模拟IIC,SDA和SCL都外部自己加有上拉电阻,一开始读出来都是0,,后面检查发现从机无应答,,接着检查时序发现是SDA引脚输入无反应的问题,下面是主函数的内容
  1. int main(void)
  2. {
  3.     ROM_FPUEnable();
  4.     ROM_FPULazyStackingEnable();
  5.     //
  6.     // Set the clocking to run directly from the crystal.
  7.     //                     80mhz
  8.     ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
  9.                        SYSCTL_XTAL_16MHZ);


  10.     ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  11.     ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

  12.     ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
  13.     ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
  14.     ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3); /* 配置上拉电阻 */


  15.     UART_Config();
  16.     iic_Init();

  17.     IIC_Start();
  18.     IIC_Send_Byte(0x50<<1);
  19.     IIC_Wait_Ack();

  20. //   IIC_SDAINT
  21.    ROM_GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_7);
  22.    ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
  23.     while(1)
  24.     {

  25.         if( ROM_GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_7)!=0)ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
  26.          else ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0 );
  27.     }

  28. }


,,在主函数中检测PA7的电平状态,,把PA7配置成输入,用的是网上别人例子中的两个函数,,然后手动给PA7接高电平或者低电平,,但是有时候可以,,有时候不可以,,很迷,,,iic_Init已经使能GPIOA的时钟了,求各位大佬帮帮忙,看看我配置有没有错
  1. void iic_Init(void)
  2. {
  3.        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

  4.        while(! ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA))
  5.        {
  6.        }
  7.        SysCtlDelay(SysCtlClockGet()/300/2);
  8.        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_6);
  9.        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_7);
  10. ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
  11. ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
  12.        ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_PIN_6);
  13.        ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_PIN_7);
  14. }




回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复