主题中讨论的其他器件: MSP430F2370、 MSP-EXP430G2ET
您好!
我有一个基于 msp430f2370 和 TRF7970A 的项目板。 我正在修改 用于 MSP430G2553的 sloc297代码 、以与 msp430f2370配合使用。
想要知道我是否必须在移植代码时特别注意任何事情?
当我在更改配置后运行仿真时、程序会卡住。
该程序在红色框中循环运行。

主代码卡滞 VLO 校准。
- 
我的主要功能如下
 
空 main (void) 
{ 
uint8_t ui8VLOCalibCount; 
// TODO:如果使用 G2 LaunchPad 上的 LED2跳线,请将其移除,否则 SPI 将不起作用。
//停止看门狗计时器, 
WDTCTL = WDTPW + WDTHOLD; 
//选择 DCO 为8MHz 
MCU_initClock (); 
MCU_delayMillisecond (10); 
//校准 VLO 
MCU_calculateVLOFreq (); 
//将 SPI SS 设置为高电平 
SLAVE_SELECT_PORT_SET; 
SLAVE_SELECT_HIGH; 
//根据 TRF7970A 数据表,将 SS 拉高到 EN 接高电平之间存在4毫秒的延迟 
MCU_delayMillisecond (4); 
//将 TRF 使能引脚设置为高电平 
TRF_ENABLE_SET; 
TRF_ENABLE; 
//等待 TRF 系统时钟启动 
MCU_delayMillisecond (5); 
//设置 TRF 初始设置 
TRF79xxA_initialSettings(); 
TRF79xxA_setTrfPowerSetting (TRF79xxA_3V_FULL_POWER); 
#ifdef enable_host 
//设置 UART 
uart_setup(); 
#endif 
//初始化所有启用的技术层 
NFC_init (); 
//启用全局中断 
__ bis_SR_register (GIE); 
//启用 IRQ 引脚 
IRQ_ON; 
#ifdef enable_host 
UART_putIntroReaderMsg (rfid_reader_fw_version、rfid_reader_fw_date); 
#endif 
while (1) 
{ 
//轮询 NFC 标签 
NFC_findTag (); 
// VLO随温度和时间的推移而漂移,因此必须定期重新校准每隔25次NFC轮询程序校准VLO 
// VLO 随温度和时间漂移,因此必须定期重新校准 
//每运行25次 NFC 轮询例程校准一次 VLO 
ui8VLOCalibCount++; 
如果(ui8VLOCalibCount == 25) 
{ 
//校准 VLO 
MCU_calculateVLOFreq (); 
//重置校准计数器 
ui8VLOCalibCount = 0; 
} 
} 
} 
- 
VLO 校准源代码如下所示
 
.cdecls C、list、"msp430f2370.h"
;函数 
.def TI_measureVLO 
;变量 
.bss TI_8MHz_COUNTS_PER_VLO_Clock、2. 
.align 2. 
.text 
; device_type .set 2 ;带有 Timer_A3的2xx 设备 
device_type .set 3;2xx 器件,带 Timer_A2 
.if device_type = 3;对于 Timer_A2器件 
TACCTLx。设置 TACCTL0 
TACCRX .SET TACCR0 
.else 
TACCTLx。设置 TACCTL2 
TACCRX .SET TACCR2 
.endif 
优点: 
TI_measureVLO 
;返回: r12. 
;-int 表示一个 VLO 周期内8MHz 时钟脉冲的数目 
;-this value 与放入 TI_8MHz_COUNTS_PER_VLO_Clock 的数字相同 
优点: 
MOV.b &BCSCTL1,R15;保留以前的设置 
MOV.b &DCOCTL、r14 
PUSH.b &BCSCTL2 
PUSH.b &BCSCTL3 
PUSH.b &P2SEL 
bic.b #0xC0,&P2SEL;清除 P2SEL 位以避免 XTAL 干扰。 
MOV.b &CALDCO_1MHz,&BCSCTL1;设置范围 
MOV.b &CALDCO_1MHz,&DCOCTL;设置 DCO 步长+调制 
MOV.w #CM_1+CCIS_1+CAP、&TACCTLx;CAP、ACLK 
MOV.w #tassel_2+MC_2+TACLR、&TACTL;SMCLK、续模式、清除 
MOV.b #LFXT1S_2、&BCSCTL3;ACLK = VLO 
CLR.b &BCSCTL2 
BIS.b #DIVA_3、&BCSCTL1;ACLK=VLO/8 
bic.w #CCIFG、&TACCTLx;清除捕获标志 
EDGE_ONE BIT.w #CCIFG、&TACCTLx;跳过第一个信号的测试捕获标志 
JZ EDGE_ONE 
bic.w #CCIFG、&TACCTLx;清除捕获标志 
EDGE_2 bit.w #CCIFG、&TACCTLx;跳过第二个信号的测试捕获标志 
JZ edge_Two; 
MOV.w &TACCRX,R13;保存硬件捕获的值 
bic.w #CCIFG、&TACCTLx;清除捕获标志 
EDGE_3bit.w #CCIFG、&TACCTLx;用于捕获良好时钟的测试捕获标志 
JZ edge_three ; 
bic.w #MC_3,&TACTL ;停止计时器 
MOV.w &TACCRX、R12 
SUB.W R13、R12 
MOV.w R12、&TI_8MHz_COUNTS_PER_VLO_Clock 
MOV.b R15、&BCSCTL1 
MOV.b r14、&DCOCTL 
pop.b &P2SEL 
pop.b &BCSCTL3 
pop.b &BCSCTL2 
修订 
结束