需要实现用TM4C通过IIC读取数据,,,硬件不好移植然后自己写了个软件的模拟IIC,SDA和SCL都外部自己加有上拉电阻,一开始读出来都是0,,后面检查发现从机无应答,,接着检查时序发现是SDA引脚输入无反应的问题,下面是主函数的内容
- int main(void)
- {
- ROM_FPUEnable();
- ROM_FPULazyStackingEnable();
- //
- // Set the clocking to run directly from the crystal.
- // 80mhz
- ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
- SYSCTL_XTAL_16MHZ);
- ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
- ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3); /* 配置上拉电阻 */
- UART_Config();
- iic_Init();
- IIC_Start();
- IIC_Send_Byte(0x50<<1);
- IIC_Wait_Ack();
- // IIC_SDAINT
- ROM_GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_7);
- ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
- while(1)
- {
- if( ROM_GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_7)!=0)ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
- else ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0 );
- }
- }
,,在主函数中检测PA7的电平状态,,把PA7配置成输入,用的是网上别人例子中的两个函数,,然后手动给PA7接高电平或者低电平,,但是有时候可以,,有时候不可以,,很迷,,,iic_Init已经使能GPIOA的时钟了,求各位大佬帮帮忙,看看我配置有没有错
- void iic_Init(void)
- {
- ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
- while(! ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA))
- {
- }
- SysCtlDelay(SysCtlClockGet()/300/2);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_6);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_7);
- ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
- ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_OD);
- ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_PIN_6);
- ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_PIN_7);
- }