主题中讨论的其他器件: 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
修订
结束