主题中讨论的其他器件:MSP430F249
工具/软件:Code Composer Studio
先生们:
在上面的器件型号字段中、不接受 TMS430F249???
我正在尝试将计时器 A0设置为计数器、最高480、但 CPU 永远不会进入 ISR。 它会陷阱到:
;********
;* ISR_TRAP_asm - *
;* *
;*版权所有(c) 2003 Texas Instruments Incorporated *
;* http://www.ti.com/ *
;* *
;* 以 源 代码和二进制形式重新分发和使用,有 无 *
;* 如果 满足以下条件 ,则允许进行修改*
;*满足 : *
;* *
;* 源 代码的重新分发必须 保留 上述版权 *
;* 注意,此条件列表和以下免责声明。 *
;* *
;* 二进制形式的再发行 必须复制上述版权 *
;* 注意,* 中的条件列表和以下免责声明
;* 随 *提供的文档和/或其他材料
;* 分发。 *
;* *
;* 德州 仪器公司的名称 和名称 均不是*
;* 其贡献者 可用于 认可或 推广产品 *
;* 源自 此 软件 ,未 经过特定的事先编写 *
;* 权限。 *
;* *
;* 本软件 由版权 所有者和贡献者 *提供
;* “原样” 以及任何 明示或暗示 的保证,包括 但不 包括*
;* 仅限于对 *的适销性和适用性的暗示保证
;* 不承认某一特定目的。 在任何情况下、版权 均不得*
;* 所有者或贡献者应对任何直接、间接、偶然的、 *负责
;* 特殊 、典型或后果性损害 (包括但 不 包括*
;* 仅限于采购替代货物或服务;丧失使用, *
;* 数据或利润;或业务中断)、但会引起任何 *
;* 责任理论,无论是合同、严格 责任还是侵权 行为*
;* (包括疏忽或其他原因)以任何方式因使用 而产生*
;* 本软件,即使被告知可能会发生此类损坏。 *
;* *
;********
;------------------------------------------------------------------
;--如果用户不提供,则缺省 ISR 处理程序
;--只需将设备放入 lpm0
;------------------------------------------------------------------
.sect ".text:_ISR:_TI_ISR_TRAP_"
.align 2.
.global __TI_ISR_TRAP
_TI_ISR_TRAP:
BIS.W #(0x0010)、SR
JMP _TI_ISR_TRAP
NOP ;CPU40兼容性 NOP
我的设置:
//计时器 A0初始化。
TACTL = MC_0; //关闭计时器 A0。
TACTL = tassel_1; //选择 ACLK 作为时钟源并除以1。
TACCR0 = 480; //将比较寄存器设置为~ 30 μ s。
TACTL |= TAIE; // Timer A 中断使能。
TACTL |= MC_1; //将计时器 A 设置为递增计数模式。
我的 ISR:
/
* 名称:evTMR_A0_ISR
*
* 说明:计时器 A0中断处理器。
* 从 C3_PM 读取下一个字节。
* SMBus_Buffer -来自 C3的每个字节在此存储器位置逐位编译。
* 计时器 A0中断标志也会在退出之前清除。
*
(小部分 /
#pragma vector = TIMERA0_vector
_interrupt void evTMR_A0_ISR (void)
{
//示波器触发器
P1OUT &=~M_LED4; //打开 M_LED4。
if (C3_byte_read =(C3_byte_read & SMBus_Flags))){
PORT_F5_Snapshot = P5IN; //使用 C3_PM 卡的 SMBus 通信端口快照。
开关(C3_Byte_RD_State)//***** C3字节读取状态机的开始 *****
{
案例 C3_Byte_Init:
if (nm_SCL &~Port_5_Snapshot) { //如果时钟线变低,那么...
bit_Position = 8; //初始化位计数器。
C3_Byte_RD_State = C3_Byte_Wait1;
}
中断;
案例 C3_Byte_Wait1:
if (nm_SCL & Port_5_Snapshot) { //如果已发送有效数据位...
if (nm_SDA & Port_5_Snapshot) {SMBus_Buffer |= 0x01;}//如果 SMBdata 是1,或1,则写入数据字节 LSB……
其他 { SMBus_Buffer &= 0xFE;}//否则清除 LSB。
bit_position--;//减少位计数。
C3_Byte_RD_State = C3_Byte_Wait2;
}
中断;
案例 C3_Byte_Wait2: //在这里等待时钟线变为低电平。
if (nm_SCL &~Port_5_Snapshot) {
if (bit_Position >0){ //如果字节中有更多位要收集,则...
SMBus_Buffer <= 1; //将刚接收到的位移向 MSbit。
C3_Byte_RD_State = C3_Byte_Wait1; //开始读取下一个位。
}
//确认接收到最后一个数据位。 将数据线拉低。
否则{
SMBdata_Clr_C3;
C3_Byte_RD_State = C3_Byte_ACK1;}
}
中断;
案例 C3_Byte_ACK1://等待 SMBus 时钟变为高电平。
if (nm_SCL 和 Port_5_Snapshot) {
C3_Byte_RD_State = C3_Byte_Ack2;
}
中断;
案例 C3_Byte_Ack2://等待 SMBus 时钟变为低电平以完成确认。
if (nm_SCL &~Port_5_Snapshot) {//如果时钟已变为低电平,则终止确认。
SMBDATA_SET_C3; //释放 SMBus 数据线以被拉高。
SMBus_Flags &=~C3_BYTE_READ; //关闭 C3卡字节读取状态机。
C3_Byte_RD_State = C3_Byte_Init; //重新 ARM 状态机。
}
中断;
}//读取 Endcase C3卡字节。
}// endif C3_byte_read
//????? TAIFG &=~BIT0; //清除中断标志。
TA0R = 0; //重新启动计数器。
//示波器触发器
P1OUT |= M_LED4; //关闭 M_LED4。
}
请提供建议。
此致、Harvey Novak