#include <msp430.h>
/**
* main.c
*/
/*
* arch_main.c
*
* Created on: 2019年2月27日
* Author: Administrator
*/
#include"sys_init.h"
UINT sysclk_cnt=0;
void main(void)
{
#ifdef VoltageMonitor
BYTE vollowflag=0;
#endif
BYTE Redled_sta,Greenled_sta;
static FRESULT worksta;
Data_Status filesta;
void main(void)
{
#ifdef VoltageMonitor
BYTE vollowflag=0;
#endif
BYTE Redled_sta,Greenled_sta;
static FRESULT worksta;
Data_Status filesta;
system_clk_config();
mcuio_init();
worksta=filesystem_init();
timer_b_config();
adc12_init();
__bis_SR_register(GIE);
start_tb;
start_adc();
while(1){
_nop();
__bis_SR_register(LPM0_bits+GIE);
//---------data2flash----------------
switch(worksta){
case FR_OK:
filesta=datamix(&datamixen);
if(Flash_Data_Ready==filesta){
worksta=f_write(&fsrc,flashdatabuffer,InFlash_length,&bytewrote);
f_sync(&fsrc);
}
break;
default:
if(!(sysclk_cnt-(sysclk_cnt>>3<<3))){
Redled_sta^=0x01;
led_sta_sel(LED_Red_1,Redled_sta);
}
if(datamixen){
datamixen=0;
}
}
mcuio_init();
worksta=filesystem_init();
timer_b_config();
adc12_init();
__bis_SR_register(GIE);
start_tb;
start_adc();
while(1){
_nop();
__bis_SR_register(LPM0_bits+GIE);
//---------data2flash----------------
switch(worksta){
case FR_OK:
filesta=datamix(&datamixen);
if(Flash_Data_Ready==filesta){
worksta=f_write(&fsrc,flashdatabuffer,InFlash_length,&bytewrote);
f_sync(&fsrc);
}
break;
default:
if(!(sysclk_cnt-(sysclk_cnt>>3<<3))){
Redled_sta^=0x01;
led_sta_sel(LED_Red_1,Redled_sta);
}
if(datamixen){
datamixen=0;
}
}
//-------AVCC电压监测-----
#ifdef VoltageMonitor
if(SVSCTL&SVSFG){
vollowflag++;
Vol_Monitor_OFF;
if(vollowflag>=32){
worksta=f_write(&fsrc,flashdatabuffer,InFlash_length,&bytewrote);
f_sync(&fsrc);
f_close(&fsrc);
f_mount(0,0);
vollowflag=0;
BoardPwr_OFF;
while(1);
}
Vol_Monitor_ON;
}
#endif
}
}
#ifdef VoltageMonitor
if(SVSCTL&SVSFG){
vollowflag++;
Vol_Monitor_OFF;
if(vollowflag>=32){
worksta=f_write(&fsrc,flashdatabuffer,InFlash_length,&bytewrote);
f_sync(&fsrc);
f_close(&fsrc);
f_mount(0,0);
vollowflag=0;
BoardPwr_OFF;
while(1);
}
Vol_Monitor_ON;
}
#endif
}
}
// Timer B0 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERB0_VECTOR))) Timer_B (void)
#else
#error Compiler not supported!
#endif
{
sysclk_cnt++;
if(sysclk_cnt>=1025){
sysclk_cnt=1;
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERB0_VECTOR))) Timer_B (void)
#else
#error Compiler not supported!
#endif
{
sysclk_cnt++;
if(sysclk_cnt>=1025){
sysclk_cnt=1;
}
__bic_SR_register_on_exit(LPM0_bits); // Clear LPM0, SET BREAKPOINT HERE
}
}
上面的程序总是运行一段时间就进入isr_trap_asm,什么原因?
定时器设定为1/16秒中断一次