主题中讨论的其他器件: HALCOGEN
尊敬的 先生:
我正在 尝试 实现 一个 逻辑 多通信协议 如 SCI, SPI, I2C ,甚至可以 RTI 也,所有通信都应该 在 单一 代码中发生, 我会 有可能.
谢谢!
此致
耶瓦
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 先生:
我正在 尝试 实现 一个 逻辑 多通信协议 如 SCI, SPI, I2C ,甚至可以 RTI 也,所有通信都应该 在 单一 代码中发生, 我会 有可能.
谢谢!
此致
耶瓦
您好、Jeev、
Unknown 说:我正在 尝试 为 SCI、SPI、I2C 等多个通信协议实现一个逻辑 ,甚至还可以 RTI ,所有通信都应该 在 单个 代码中进行, 我会实现的 。
是的、可行。
您只需依次组合 while (1)循环中的所有代码。
如果有任何外设使用中断、您只需添加相应的代码即可。
IAM 正在工作的 I2C 示例代码 使用 微控制器 TMS570LC4357,开漏 连接 外部连接 任何细节 请与 我分享先生,它将真的很有用,请 尽快答复我先生 [/报价]可以在 HALCoGen 自身的帮助主题部分找到 I2C 示例
如有必要、您也可以在以下常见问题解答中找到一些经过测试的示例:
--
谢谢。此致、
Jagadish。
您好、Jeev、
请尝试使用2.2K 或2.7K 电阻器作为 I2C 上拉电阻器。
请参阅以下主题以了解更多详细信息:
(+) TMS570LS3137:I2C 无法正常工作-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
--
谢谢。此致、
Jagadish。
#include "HL_sys_common.h"
/*用户代码开始(1)*/
#include "HL_i2c.h"
/*用户代码结束*/
/**@fn void main (void)
*@简介应用程序主要功能
*@注意此功能默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实施应用程序。
*/
/*用户代码开始(2)*/
#define DATA_COUNT 10u
#define Master_Address 0x26
#define Slave_Address 0x8
uint8_t TX_TX_0x[10] Data_Master ={0x10、0x11、0x12、0x13、0x14、0x15、0x16、0x17、0x18、0x19};
uint8_t RX_UCC110[10] Data_Master ={0};
uint8_t TX_TX_TX[10] Data_Slave ={0x20、0x21、0x22、0x23、0x24、0x25、0x26、0x27、0x28、0x29};
uint8_t RX_UCC110[10] Data_Slave ={0};
/*用户代码结束*/
int main (空)
{
/*用户代码开始(3)*/
int repeat = 0;int delay = 0;
//主传输功能//
/* I2C 初始化、根据 GUI
*模式=主设备-发送器
*波特率= 100KHz
*计数= 10
*位数= 8位
*/
i2cInit();
/*配置要与之通信的从器件地址*/
i2cSetSlaveAdd (i2cREG1、Slave_Address);
/*设置到发送器的方向*/
/*注:可选-在 Init 中完成*/
i2cSetDirection (i2cREG1、I2C_TRANSMIT);
for (REPEAT = 0;REPEAT < 2;REPEAT ++)
{
/*配置数据计数*/
/*注:可选-它在 Init 中完成,除非用户想要更改*/
i2cSetCount (i2cREG1、DATA_COUNT);
/*将模式设置为主模式*/
i2cSetMode (i2cREG1、I2C_MASTER);
/*编程计数后设置停止*/
i2cSetStop (i2cREG1);
/*发送启动条件*/
i2cSetStart (i2cREG1);
/*轮询模式下发送 data_count 数据的数量*/
i2cSend (i2cREG1、DATA_COUNT、TX_REG1 Data_Master);
/*等待清除总线忙状态*/
while (i2cIsBusy (i2cREG1)== true);
/*等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);
/*清除停止条件*/
i2cClearSCD(i2cREG1);
/*开始下一个块之前的简单 Dealya */
/*取决于从设备准备就绪的速度*/
for (delay=0;delay<1000000;delay++);
}
//主机接收功能//
/*配置要与之通信的从器件地址*/
i2cSetSlaveAdd (i2cREG1、Slave_Address);
/*设置到接收器的方向*/
i2cSetDirection (i2cREG1、I2C_receiver);
for (REPEAT = 0;REPEAT < 2;REPEAT ++)
{
/*配置数据计数*/
/*注:可选-它在 Init 中完成,除非用户想要更改*/
i2cSetCount (i2cREG1、DATA_COUNT);
/*将模式设置为主模式*/
i2cSetMode (i2cREG1、I2C_MASTER);
/*编程计数后设置停止*/
i2cSetStop (i2cREG1);
/*发送启动条件*/
i2cSetStart (i2cREG1);
/*发送 DATA_COUNT 轮询模式下的数据数量*/
i2cReceive (i2cREG1、DATA_COUNT、RX_REF1 Data_Master);
/*等待清除总线忙状态*/
while (i2cIsBusy (i2cREG1)== true);
/*等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);
/*清除停止条件*/
i2cClearSCD(i2cREG1);
/*启动下一个块之前的简单延迟*/
/*取决于从设备准备就绪的速度*/
for (delay=0;delay<1000000;delay++);
}
}
这 是 我 使用 SIR 的代码,是不是 很好 SIR
这 是 我正在 使用的代码 SIR 先生,这是很好的先生 [/报价]代码看起来没有问题。
您好、Jeev、
这取决于你正在使用的波特率、例如、如果你的波特率是9600、然后接收带有2个停止位的1字节数据、那么将花费大约1ms 的时间。 如果您能够在不到1ms 的时间内处理接收到的数据、那么就不会遇到任何问题。
如果在1ms 之前未能处理、则会出现"Overflow Error"、表示接收到的数据可能会用新接收到的数据覆盖。 因此、您必须确保这一点。
--
谢谢。此致、
Jagadish。
e2e.ti.com/.../SPI.CODE.txtThis 代码 我 已经 为 SPI 编写 使用控制器 TMS570LS4357 ,对于 halcogen iam 小 混淆,什么 将 halcogen 设置 SIR 和 会这个 好 SIR ,修改应该做,告诉我 SIR