#include <msp430.h>
/**
* main.c
*/
/*
* arch_main.c
*
* Created on: 2019年2月27日
* Author: Administrator
*/
#include"sys_init.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秒中断一次
user4222773:
问题追加:
运行时就会出现这种错误
灰小子:
楼主,你好。你的图片都挂了,看不到。建议重新上传一下图片。
Susan Yang:
建议您以附件形式重新上传一下您的图片,谢谢
user4222773:
user4222773:
回复 灰小子:
楼下重新上传了,求解
灰小子:
回复 user4222773:
楼主,你好。
此类问题出现的原因一般是声明了一个中断并使能,但是并未写该函数的中断服务程序。或者是中断服务程序使用的中断向量和使能的中断不匹配。
你用的哪个型号的msp430?