|
msp430F2471串口中断里写不上flash,是什么原因
[复制链接]
#include
void int_sys()
{
WDTCTL = WDTPW + WDTHOLD;
// if (CALBC1_12MHZ ==0xFF || CALDCO_12MHZ == 0xFF)
//{
// while(1); // If calibration constants erased
// do not load, trap CPU!!
//}
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ+0x30;
BCSCTL2 = 0x00;
BCSCTL3 = 0x20;
//delay1ms(1000);
//DCOCTL = CALDCO_12MHZ;
//BCSCTL1 = CALBC1_12MHZ+0x30;
if (BCSCTL1 == 0xFF) // Check flash erasure
while(1); // If DCO constants invalid,trap CPU
FCTL2 = FWKEY + FSSEL0 + FN1;
// playsb(0xe7);
P3SEL=0X30;
P3SEL |= 0x0C0; // P3.6,7 = USCI_A1 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // CLK = ACLK
UCA0BR0 = 104; // 32kHz/9600 = 3.41
UCA0BR1 = 0;
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE ; // Enable USCI_A0 TX/RX interrupt
UCA1CTL1 |= UCSSEL_2; // SMCLK
UCA1BR0 = 104; // 12MHz 9600
UCA1BR1 = 0;
UCA1MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UC1IE |= UCA1RXIE; // Enable USCI_A1 RX interrupt
TA0CCTL0 = CCIE; // TA0CCR0 interrupt enabled
TA0CCR0 = 11400;
TA0CTL = TASSEL_2 + MC_1; // SMCLK, upmode
_EINT();
}
void delay1_ms(unsigned int k)
{
unsigned int i,m;
for(m=0;m
{
for(i=0;i<100;i++)
{;}
}
}
void s0_send_byte(unsigned char data)
{ while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = data;
}
void s1_send_byte(unsigned char data)
{
while (!(UC1IFG&UCA1TXIFG)); // USCI_A1 TX buffer ready?
UCA1TXBUF = data;
// delay1_ms(1);
}
void write_SegC(unsigned char * value) //4*64
{
char *Flash_ptr; // Flash pointer
unsigned int i;
Flash_ptr = ( char *)0x1040; // Initialize Flash pointer
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + ERASE + EEI; // Set Erase bit, allow interrupts
*Flash_ptr = 0; // Dummy write to erase Flash seg
FCTL1 = FWKEY + WRT;
for (i = 0; i < 64; i++)
{
*Flash_ptr++ = value; // Write value to flash
}
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + LOCK; // Set LOCK bit
}
void read_SegC(unsigned char * p)
{
unsigned char *ptrd;
unsigned char i;
ptrd = (unsigned char *)0x1040;
for(i=0;i<64;i++)
{
*p=*ptrd;
p++;
ptrd++;
}
}
void dof(void)
{unsigned char i;
unsigned char p[64];
for(i=10;i<74;i++) p[i-10]=i;
write_SegC(p);
i=0;
}
void main( void )
{
unsigned char i,ADDR;
unsigned char p[64];
int_sys();
// BEEP_1;
// delay_1us(2000);
//BEEP_0;
//读黑名单
read_SegC(p);
i=0;
dof();
while(1)
{
}
}
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void) ///RC522
{
// s0_send_byte(UCA0RXBUF);
dof();
}
#pragma vector=USCIAB1RX_VECTOR //上位机
__interrupt void USCI1RX_ISR(void)
{
}
///15829748923
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
//TM_1MS++;
//if(TM_1MS==100) { TM_1MS=0;BEEP_0;}
//if(TM_1MS==20000) {/ p(0xf6,0x00,0x00);
// TM_1MS=0;}
// if(TM_1MS==60000) TM_1MS=0;
}
/*
#pragma vector=PORT2_VECTOR
__interrupt void Port2()
{
if((P2IFG&BIT4) == BIT4)
{
P2IFG &= ~BIT4; //清除中断标志
//用户代码
++btime;
//
}
}
*/
|
|