请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TLC5973 工具与软件:
尊敬的支持团队:
我目前正在处理一个涉及 TLC5973 3通道12位 LED 驱动器的项目。 在实施数据传输的精确时序要求(尤其是在 delayMicroseconds()
功能方面)的过程中、我面临着一些挑战。 TLC5973数据表规定、写入"0"或"1"位的时序必须遵守基于周期时间的特定限制(t_CYCLE
)。
具体而言:
- 当×"0"时、第二个上升沿应不早于
t_CYCLE
距第一个上升沿0.9 μ s 发生。 - ×"1"时、第二个上升沿应在
t_CYCLE
第一个上升沿后0.5 μ s 内发生。
我在实现准确的 delayMicroseconds()
功能时需要帮助来满足这些要求。 如果您能提供以下方面的指导或建议、我将不胜感激:
- 使用忙等待环路或硬件计时器实现精确的微秒级延迟。
- 可用于在微控制器上实现此类精确延迟的任何示例代码或库建议。
此外、如果您在将 TLC5973与标准微控制器搭配使用时有任何具体注意事项或配置、请告知建议。
下面我写了一个代码请检查。
#define CASCACK_NUM 1.
#define WRT_CMD 0x3AA
void led_test (void)
{
GSout0[0]=0X666;
GSout1[0]=0x666;
GSOUT2[0]=0x666;
for (Device_j=0;Device_j<cascade_NUM;Device_j++)//N-1级联器件数据
{
SDI_Data=(((uint64_t) WRT_CMD)<<36)+(GSout0[Device_j]<<24)+(GSout1[Device_j]<<12)+GSout2[Device_j];
for (bit_i=0;bit_i<48;bit_i++)//write Data
{
if ((SDI_Data>>(47-位_I))&(0x0001))
{
端口。 P8 = 2;// GPIO HIGH (GPIO 2高电平)
for (delay_u32 = 0;delay_u32<7;delay_u32++);//1us delay
端口。 P8 = 0;//GPIO 低电平
for (delay_u32 = 0;delay_u32<7;delay_u32++);//1us 延迟
端口。 P8 = 2;// GPIO HIGH (GPIO 2高电平)
for (delay_u32 = 0;delay_u32<7;delay_u32++);//1us delay
端口。 P8 = 0;// GPIO low
for (delay_u32 = 0;delay_u32<35;delay_u32++);// 5us 延迟
}
设计
{
端口。 P8 = 2;//GPIO 为高电平
for (delay_u32 = 0;delay_u32<7;delay_u32++);//1us delay
端口。 P8 = 0;//GPIO 低电平
for (delay_u32 = 0;delay_u32<41;delay_u32++);// 6us delay
}
}
for (delay_u32 = 0;delay_u32<63;delay_u32++);// 9us delay
}
返回;
}