主题中讨论的其他器件:TDC7201、
您好!
触发器流到达1KHz 时、触发器是一个持续约500us 的5VDC 脉冲。 我使用触发器的上升沿来引起中断、进而导致对两个 TDC 的寄存器0进行写入、除其他外、寄存器0将 TDC 配置为使用触发器的下降沿作为"开始"信号。 请注意、在中断期间不调用寄存器写入函数(如下所示)。
中断后大约需要500us 的时间来配置 TDC、但写入 TDC 寄存器的时间似乎需要750us、因此我正在寻找一种加快此步骤的方法。
在"TDC7200EVN-USB"示例的 main.c 中、"SMCLK"似乎配置为4MHz。 这是"相关"时钟吗? 是否可以将其配置为8MHz (不更改硬件)? (我不知道该时钟是否受 EVM 硬件限制为特定值。)
编辑:应用 程序现在正在使用4MHz XT2时钟与 TDC7201进行通信是否正确? (请参阅以下注释"//4/7:选择 SMCLK = 4MHz")。 是否可以修改此应用以使用 MSP430F5529LaunchPad 上存在的8MHz SMCLK? 注:设备将始终连接到 USB 主机。
void Init_Clock (void)
{
//启用 XT2 XIN/XOUT 引脚
P5SEL |= 0x0C; //在 P5.3和 P5.2
UCSCTL6上选择 XIN、XOUT &=~XT2OFF; //启用 XT2
UCSCTL6 |= XT2DRIVE_3;
P5SEL |= BIT4+BIT5; //选择 XT1
UCSCTL6 &=~(XT1OFF); //
UCSCTL6上的 XT1 |= XCAP_3; //内部负载电容
UCSCTL3 = 0; // FLL 参考时钟= XT1
//循环、直到 XT1、XT2和 DCO 稳定-在本例中循环、直到 XT1和 DCO 稳定
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
UCSCTL6 &=~(XT1DRIVE_3); // XTAL 现在是稳定的、减少 UCSCTL4的驱动强度
|= SE拉美_0; // ACLK = LFTX1 (默认)
__bis_SR_register (SCG0); //禁用 FLL 控制环路
UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_7; //选择 DCO 范围50MHz 运行
UCSCTL2 = FLLD_0 + 731; //将 DCO 乘法器(762/498)设置为25MHz/16MHz
//(N + 1)* FLLRef = Fdco
//(762 + 1)* 32768 = 25MHz
//设置 FLL Div = fDCOCLK/2
__BIC_SR_register (SCG0); //启用 FLL 控制环路
// DCO 范围位已
更改时最坏情况下的稳定时间//为 n x 32 x 32 x f_MCLK /f_FLL_reference。
有关优化、请参阅5xx // UG 中的 UCS 一章。
// 32 x 32 x 25MHz / 32、768Hz ~ 780k MCLK 周期、以便 DCO 稳定
__delay_cycles (782000);
//循环、直到 XT1、XT2和 DCO 稳定-在本例中、只有 DCO 必须稳定
执行
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
// 4/7:选择 SMCLK = 4MHz
UCSCTL4 = SELA_XT1CLK + SELESS_XT2CLK + SELM_DCOCLKDIV; // SMCLK=4MHz MCLK=24MHz
//循环直到 XT1、XT2和 DCO 稳定-在这种情况下,只有 DCO 必须稳定
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
TI_TDC720x_RLED_PxOUT &=~TI_TDC720x_RLED_PIN; //关闭红色
}
//
下面是 TDC7201-ZAX-EVM 示例随附的寄存器写入代码。 您是否看到有机会缩短此代码所需的时间? 当我将鼠标悬停在"whiles"上时、CCS 将提供"
"建议使用与进入 LPMx 和 ISR 组合的中断"、因此我将在接下来介绍。
"。
void TI_TDC720x_SPIByteWriteReg (uint8_t addr、uint8_t value、uint8_t dev) { uint8_t instr; if (dev = TDC720x_TDC1) { TI_TDC720x_CSB1_PxOUT &=~TI_TDC720x_CSB1_PIN; ///CS 启用 TI_TDC720x_CSB2_PxOUT |= TI_TDC720x_CSB2_PIN; }否则 { TI_TDC720x_CSB2_PxOUT &=~TI_TDC720x_CSB2_PIN; TI_TDC720x_CSB1_PxOUT |= TI_TDC720x_CSB1_PIN; } //写入模式和自动包括关闭 安装= TDC720x_write_bit | addr; Inst = TDC720x_AUTOINC_OFF_BIT & INSTS; while (!(UCB0IFG&UCTXIFG)); //等待 TXBUF 就绪 UCB0TXBUF = inst; //发送地址的 MSB while (!(UCB0IFG&UCTXIFG)); //等待 TXBUF 就绪 UCB0TXBUF =值; //发送数据值 while (UCB0STAT 和 UCBUSY); //等待 TX 完成 TI_TDC720x_CSB1_PxOUT |= TI_TDC720x_CSB1_PIN; ///CS 禁用 TI_TDC720x_CSB2_PxOUT |= TI_TDC720x_CSB2_PIN; }
感谢您的任何帮助!