// wait until Capture flag is set
while(!(TA0CCTL1 & CCIFG));
// clear flag
TA0CCTL1 &= ~CCIFG;
// check LSB
if(TA0CCR1 & 0x01)
{
result |= 0x01; }
// change the divison of timer input clock
TA0CTL = (TA0CTL & 0xFCFF) | ((TA0CCR1 & 0x03) << 8);
}
return result;
} CCS 编译器警告 #10374-D
在 CCS v5.x 的全新 CCS 编译器中(代码生成工具/CGT),编译器将给出这样的警告: #10374-D 中断矢量 "USI" 没有一个中断句柄例程。 如果它发现有任何中断矢量未被初始化时就会给出此警告。 原因在于,这基本上是一个初始化所有中断矢量的好做法,所以在假中断意外出现时,MSP430 将会因为未将中断矢量初始化而无法获得复位。 以下示例显示了如何创建 "Traplsr" 来删除 CCS 编译器给出的关于这个问题的警告:
#include <msp430g2231.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0; // Set P1.0 to output direction
for(;;)
{
P1OUT ^= BIT0; // Toggle P1.0 using exclusive-OR
__delay_cycles(1000000);
}
}
// trap isr assignation - put all unused ISR vector here
#pragma vector = ADC10_VECTOR, NMI_VECTOR, PORT1_VECTOR, PORT2_VECTOR, \ TIMER0_A0_VECTOR, TIMER0_A1_VECTOR, USI_VECTOR, WDT_VECTOR
__interrupt void TrapIsr(void)
{
// this is a trap ISR - check for the interrupt cause here by
// checking the interrupt flags, if necessary also clear the interrupt
// flag
}