主题中讨论的其他器件:TMS570LS3137
工具/软件:Code Composer Studio
我想将 AT24C256与 Hercules TMS570LS31x/21x 开发套件连接、以下代码不起作用:
#include "het.h"
#include "Gio.h"
#include "rti.h"
#include "i2c.h"
/*用户代码结束*/
/*包含文件*/
#include "sys_common.h"
/*用户代码开始(1)*/
/*用户代码结束*/
/**@fn void main (void)
*@应用程序主函数简介
*@请注意、默认情况下、此函数为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*
/*用户代码开始(2)*/
#define Slave_Address 0xA0 // 1 0 1 0 0 A1 A0 R/W
uint8_t TX_Data[4]={0x00、0x00、0xAA、0x55}; //前两个字节为字地址、然后两个字节为数据
/*用户代码结束*/
int main (空)
{
/*用户代码开始(3)*/
i2cInit();
i2cSetSlaveAdd (i2cREG1、Slave_Address);
i2cSetDirection (i2cREG1、I2C_transmitter);
i2cSetCount (i2cREG1、4);
i2cSetMode (i2cREG1、I2C_MASTER);
i2cSetStop (i2cREG1);
i2cSetStart (i2cREG1);
i2cSend (i2cREG1、4、TX_Data);
while (i2cIsBusy (i2cREG1)=true);
while (i2cIsStopDetected (i2cREG1)=0);
i2cClearSCD (i2cREG1);
while (1);
/*用户代码结束*/
}
控制器正在 i2cSend()函数中等待,如下所示:
void i2cSend (i2cBASE-t * i2c、uint32长度、uint8 *数据)
{
/*用户代码开始(17)*/
/*用户代码结束*/
if ((g_i2cTransfer_t.mode &(uint32) I2C_TX_INT)!= 0U)
{
/*中断模式*/
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
g_i2c 传输_t.data =数据;
/*通过发送第一个字节开始传输*/
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
I2C->DXR =(uint32)(*g_i2cTransfer_t.data);
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
g_i2c 传输_t.data++;
/*长度-1、因为一个数据已被写入*/
g_i2cTransfer_t.length =(长度- 1U);
/*启用发送中断*/
I2C->IMR |=(uint32) I2C_TX_INT;
}
其他
{
/*发送数据*/
while (长度> 0U)
{
/*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
while (((i2c->STR &(UINT32) I2C_TX_INT)== 0U) <<<---- --控制器正在等待此处
{
}/*等待*/
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
I2C->DXR =(UINT32)(*DATA);
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
Data++;
长度--;
}
}
/*用户代码开始(18)*/
/*用户代码结束*/
}