请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 工具/软件:TI C/C++编译器
您好,
请使用MSP430F5529启动板测量信号的周期。 信号通过WFP 1.2 传送到MCU。 我在捕获模式下将TA0与CCR1寄存器一起使用。 调试程序时,主应用程序(即代码的LED闪烁部分)工作正常,但立即启用中断,下面的程序将运行(ISR_TRAP.ASM)。 这会导致整个应用程序挂起。 我需要帮助来解决此问题,谢谢。
;************************************************************************ ;* ISR_TRAP.asm - 15.12 v.1. * ;* * ;*版权所有(c) 2003-2016 Texas2016 Texas Instruments Incorporated * ;* http://www.ti.com/ * ;* *;* 以源代码和二进制形式重新分发和使用,无论是否使用 * ;*修改,但前提是满足以下条件 * ;*满足条件: * ;* * ;* 重新分发源代码必须保留上述版权 * ;* 注意,此条件列表和以下免责声明。 * ;* * ;* 以二进制形式重新分发时必须复制上述版权 * ;* 注意,此条件列表和中的以下免责声明 * ;* 随提供的文档和/或其他材料 * ;* 分发。 * ;* * ;* 德州仪器(TI)公司的名称和名称都不是 * ;* 的贡献者可用于支持或推广产品 * ;* 派生自本软件,未事先编写特定内容 * ;* 权限。 * ;* * ;*本软件由版权所有者和贡献者提供 * ;*“按原样”和任何明示或暗示的担保,包括但不包括 * ;*仅限于适销性和适用性的暗示担保 * ;*不存在特定目的。 在任何情况下,版权都不应享有 * ;*所有者或贡献者对任何直接,间接,附带, * ;*特殊,惩戒性或后果性损害(包括但不包括 * ;*仅限于采购替代货物或服务;无法使用, * ;*数据或利润;或业务中断) * ;*责任理论,无论是合同,严格责任还是侵权行为 * ;*(包括疏忽或其他)因使用而产生的任何原因 本 软件的*;*,即使被告知可能会造成此类损坏。 * ;* * ;******************************************************************************** ---------------------------------- ;---缺省ISR处理程序(如果用户不提供 );---简单地将设备放入lpm0 ;------------------ .sect ".text:_ISR:__TI_ISR_TRA" .ALIGN 2 .GLOBAL __TI_ISR_TRAP __TI_ISR_TRAP: 比宽 #(0x0010),SR JMP __TI_ISR_TRAP 无操作 ;CPU40兼容性NOP ;********************************************************************** ;*生成属性 *;* HW_MPY_INITY_INFO=1:文件没有任何内嵌的硬件颠簸 *;* HW_MPY_ISR_INFO =1:文件没有ISR,但调用不顺利或不能进行*;****************************************************************************** .battr "ti",Tag_File,1,Tag_HW_MPY_inline_info (1) .battr "ti",Tag_File,1,Tag_HW_MPY_ISR_INFO (1)
这是我正在调试的程序:
/**
部分:包含的文件
*/
#include <stdio.h>
#include <stdint.h>
#include "driverlib.h"
#include "lc_driver.h"
/**
部分:全局变量定义
*/
uint16_t period_raw =0;
uint16_t captured_value;
uint16_t previous_capture;
f_old;
float period_old;float period;
浮点周期更改;
浮点校准电容;
浮点测量电容;
/**
部分:宏声明
*/
#define RA 1000 //电阻器RA值(欧姆)
#define rb 1万 //电阻器rb值(欧姆)
#define K (1.44 /(RA)+(2 * RB)))) //确定电容的常量
#define P 1 //一个计时器tick值(以秒为单位)/**
部分:函数原型
*/
void capture _config (void);
内联void capture interrupt (void);
/**
部分:主应用
*/
int main (void)
{
WDT_A_HOLD (WDT_A_BASE); //停止监视程序计时器
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);
capture_config();// 为捕获模式配置timerA
delay_ms(50); //允许555计时器稳定?
CHAR DISPLAY_DATA[20];
while (1)
{
IF (TIMER_A_CAPTENT_OVERFLOW == Timer_a_getCaptureCompareInterruptStatus\
(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,TIMER_A_CAPTENT_OVERFLOW))
{//
重置计时器?}
//闪烁LED
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
DELAY _ms (1000);
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
DELAY _ms(1000);
}
/**
部分:功能定义
*/
void capture_config(void)
{//
将WFP设置1.2 为输入
GPIO端口P1(GPIO_PORT_P1, GPIO_PIN2);
//将WFP 1.2 设置为捕获输入
分配器gPIO_setAsalModuleFunctionInputPin(GPIO_PORT_Pp1,时钟时间器=_CONSTROPH_CLAM_PARAME_PARAMERA_PARAMERA_PARAME_POSTER_1_PARAMERASE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_TIME_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_POST_PORADE_PORADE_POST_PORAME_PORADE
continuous_param.startTimer = false;
Timer_a_initContinuousMode(timer_A0_base,&continuous_param);
//初始化timerA捕获模式
Timer_a_clearCaptureCompareInterrupt (timer_A0_base, timer_a_CAPTURMPare_register_0);
Timer_a_initcapcapture_mode_mode_timer_conve_capture_param.captureRegister =
capture_param.captureInterruptEnable
capture_param.captureInputSelect capture_param.captureMode
Capture_param.synchronizeCaptureSource = timer_a_capture_synchronous;
capture_param.captureOutputMode = timer_a_OUTPUTMODE_OUTBITVALUE;
Timer_a_initCaptureMode (timer_A0_base,&capture_param);
Timer_a_startCounter(timer_A0_base, Timer_a_continuous模式);
//启用中断
__bis_sr_register(GIE);
}内联void capture_interrupt (void){静态uint8_t interrupt number =0;interrupt number++;//获取捕获的值captured_value = Timer_a_getCapture CompareCount(timer_A0_base, timer_a_captur_1=
;interrupt_parag_f_f_f_f_f_f_f_={_number_interrupt_parag_f_f_number=0;<_interrupt_para=_par_____para=0; se_number=_par_______parinterrupt______ 中断服务例程
*/
#pragma vector=Timer1_A1_vector
__interrupt void timer_A0_ISR(void)
{
SWITCH(__偶 数_IN_RANGE(TA0IV, 14))
{
案例0:// 无
中断;
案例2: // CCR1 IFG
capture_interrupt ();
案例
4: // CCR2 IFG
中断;
案例6:CCIFG/
R3/
CCIfG中断 :案例8
:CCR3/ CCR3/ CCIFG中断
案例12: // CCR6 IFG
中断;
案例14: // TAOIFG
中断;
默认: //从未执行
中断;
}
尽管应用程序挂起,但在“监视”窗口中查看CCR1寄存器,确认当从信号发生器接收1KHz的信号时,计时器的捕获模式正在工作。 下面显示了此操作的屏幕截图: