完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-11 09:56 编辑
在进行I2C总线调试时,主机将数据发送到从机时,从机无法接收数据源代码如下; #include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_i2c.h" #include "driverlib/i2c.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "utils/uartstdio.h" #include "driverlib/rom.h" #include "driverlib/fpu.h" #include "driverlib/pin_map.h" #include "driverlib/uart.h" // 变量定义部分 #define NUM_I2C_DATA 3 // 定义要通过I2C发送的数据包的数目 // 设定slave(从)模块的地址,是一个7-bit的地址加上RS位,具体形式如下: [A6:A5:A4:A3:A2:A1:A0:RS] // RS位是一个指示位,如果RS=0,则说明是主发送数据,从接收数据;RS=1说明是主接收数据,从发送数据 #define SLAVE_ADDRESS 0x3C //0111100 // UART0的配置及初始化部分。 //UART0模块用于通过计算机虚拟串口显示过程信息,主要包括InitConsole函数和一些UARTprintf语句。 void InitConsole(void) [ SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); //UART0/波特率115200/时钟频率50MHZ UARTStdioConfig(0,115200,16000000); ] // 将I2C0模块配置为一个主模块和一个从模块,并且通过LOOPBACK模式,将它们的时钟线和数据线连接起来。由于在LOOPBACK模式下, //主模块和从模块是在内部连接起来的。因此从模块可以接收到主模块自己发送的数据。 int main(void) [ //使能FPU FPUEnable(); FPULazyStackingEnable(); //定义发送数据和接收数据的缓存 uint32_t ulDataTx[NUM_I2C_DATA]; uint32_t ulDataRx[NUM_I2C_DATA]; uint32_t ulindex; // 设置系统时钟为50MHz SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // 使能I2C0模块的时钟信号. SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); // 由于I2C0使用PB2、PB3两个引脚,需要使能GPIOB模块对应的时钟信号 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // 将PB2的功能选择为I2C0模块的时钟信号,将PB3选择为数据信号 GPIOPinConfigure(GPIO_PB2_I2C0SCL); GPIOPinConfigure(GPIO_PB3_I2C0SDA); // 对PB2和PB3两个引脚做有关I2C功能的配置 //***************************************************************************** GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2); GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); //***************************************************************************** // 寄存器操作:将I2C0模块配置为运行于LOOPBACK模式。在LOOPBACK模式下,I2C0模块在内部连接了主、从模块的信号线。 // 因此既可以作为主模块发送数据,也可以作为从模块接收数据 HWREG(I2C0_BASE + I2C_O_MCR) |= 0x01;//直接对寄存器进行配置 // 使能并初始化I2C0的主模块,I2C0模块使用系统时钟。 //语句的最后一个参数是用来设定数据传输速率的。false表示传输速率是100kbps,true则意味着传输速率是400kbps。此处使用的是100kbps的传输速率 I2CMasterInitExpClk(I2C0_BASE, SysCtlClockGet(), false); I2CMasterEnable(I2C0_BASE); // 使能I2C0从模块。注:只是为了测试使用。 I2CSlaveEnable(I2C0_BASE); // 设置从模块的地址 I2CSlaveInit(I2C0_BASE, SLAVE_ADDRESS); // 使能UART模块,只是为了显示信息用 InitConsole(); UARTprintf("I2C Loopback Example ->"); UARTprintf("n Module = I2C0"); UARTprintf("n Mode = Single Send/Receive"); UARTprintf("n Rate = 100kbpsnn"); // 设置要发送的数据 ulDataTx[0] = 'I'; ulDataTx[1] = '2'; ulDataTx[2] = 'C'; // 主模块向从模块发送3个数据。 // 初始化接收缓存区 for(ulindex = 0; ulindex < NUM_I2C_DATA; ulindex++) [ ulDataRx[ulindex] = 0; ] // 输出信息指示是主模块发送,从模块接收 UARTprintf("Tranferring from: Master -> Slaven"); // 设置I2C0主模块将要放在总线上的从模块地址. false代表主模块发送,从模块接收 I2CMasterSlaveAddrSet(I2C0_BASE, SLAVE_ADDRESS, false); // 主模块向从模块发送3个I2C数据 for(ulindex = 0; ulindex < NUM_I2C_DATA; ulindex++) [ // 显示主模块正发送的数据 UARTprintf(" Sending: '%c' . . . ", ulDataTx[ulindex]); // 把将发送的数据存入数据寄存器中 I2CMasterDataPut(I2C0_BASE, ulDataTx[ulindex]); // 主模块开始发送数据 ,模式:主机发送单字节数据 I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND); // 等待,直到从模块接收到数据,并且发送ACK信号回应该数据 while(!(I2CSlaveStatus(I2C0_BASE) & I2C_SLAVE_ACT_RREQ)); // 从从模块中读取接收到的数据 ulDataRx[ulindex] = I2CSlaveDataGet(I2C0_BASE); // 等待主模块发送完毕 while(I2CMasterBusy(I2C0_BASE)); // 显示已接收到的数据 UARTprintf("Received: '%c'n", ulDataRx[ulindex]); ] |
|
相关推荐
2个回答
|
|
回环模式的时候,没有主机从机的说法的,相当于自发自收的。回环模式官方提供例程了,你可以看看。你的代码不全吧,看着乱糟糟的。
|
|
|
|
官方例程下载下来时main.c文件是0KB,这个代码应该是缺少接收部分的代码吧 |
|
|
|
只有小组成员才能发言,加入小组>>
341 浏览 1 评论
539 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
781 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
655 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1138 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
69浏览 29评论
195浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
256浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
205浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
63浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:31 , Processed in 0.572077 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号