2812 串口程序

3192阅读 0评论2010-09-10 red_eyed_hare
分类:嵌入式

2812使用外部30M晶振,SysCtrlRegs.PLLCR = 0x02, SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002; SYSCLKOUT=30M
串口配置:
void InitSci(void)
{
 // Initialize SCI-A:
 //*UART_MODE = 0x44;//232mode
 *UART_MODE = 0xDD;//422mode
 
 EALLOW;
 GpioMuxRegs.GPFMUX.all = 0x0030;
 EDIS;
 /* loopback   8 bit data */
 SciaRegs.SCICCR.all = 0x07;
 
 SciaRegs.SCICTL1.all = 0x03;
 SciaRegs.SCICTL2.all = 0x03;
 
 SciaRegs.SCIHBAUD = 0x00;
 //SciaRegs.SCILBAUD = 0xf3; //150M,19200
    SciaRegs.SCILBAUD = 0x30; //30M,19200
 
 SciaRegs.SCICTL1.all = 0x23;
 
 PieCtrl.PIEIER9.bit.INTx1 = 1;
 PieCtrl.PIEIER9.bit.INTx2 = 1;
 //tbd...
  
 // Initialize SCI-B:
 //tbd...
}
采用中断方式:
interrupt void SCIRXINTA_ISR(void)
{
       unsigned int tempdata;
    tempdata=SciaRegs.SCIRXBUF.all;
    UartProcess(tempdata);
 
// *Rx++ = tempData;
// RX_INFO_FLAG.rx_all=1;
 PieCtrl.PIEACK.bit.ACK9 = 1;
 EINT; 
}
 
interrupt void SCITXINTA_ISR(void)     // SCI-A
{
            length--;
         if(length>0)    SciaRegs.SCITXBUF=*Tx++;
      else 
   {
    Tx=0;
    length=0;
  }
 PieCtrl.PIEACK.bit.ACK9 = 1;
 EINT;
}
 
void SendData(unsigned char * pt)
{        
  Tx=pt;
  length=9;
  length--;
         if(length>0)    SciaRegs.SCITXBUF=*Tx++;
  else 
   {
    Tx=0;
    length=0;
   }                        
 
/*设置中断服务程序入口地址*/
 EALLOW; // This is needed to write to EALLOW protected registers
 PieVectTable.TXAINT = &SCITXINTA_ISR;
 PieVectTable.RXAINT = &SCIRXINTA_ISR;
  EDIS;   // This is needed to disable write to EALLOW protected registers

 /*开中断*/
 IER |= M_INT9;
 EINT;   // Enable Global interrupt INTM
 ERTM; // Enable Global realtime interrupt DBGM
 
上一篇:2812 看门狗程序
下一篇:2812 定时器程序