⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st16c2550.c

📁 在UCOS-II操作系统成功移植到AT91SAM7S64的基础上
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<string.h>
#include<stdlib.h>

#include "Board.h"
#include "ST16C2550.h"
#include "ad.h"
#include "os_cpu.h"

#define TDS  120 //20ns
#define TDH  100 //10ns
#define TWHR 40 //25ns

extern unsigned char receiverdata_portA;
extern unsigned char receiverdata_portB;
extern unsigned char receiver_porta_state;
extern unsigned char receiver_portb_state;
extern unsigned char isReceiverData;

extern double x_angle;
extern double y_angle;
extern double dir_angle;
extern float compass;
extern float pitch;
extern float roll;

extern char measure_data[200];
extern unsigned char str_compass[10];
extern unsigned char str_pitch[10];
extern unsigned char str_roll[10];
extern unsigned char Temperater[10];
extern int posflag,poscount;//用来记录罗盘数据处理进程及工作状态
extern int send_pos;

extern int Isctlhead;
extern unsigned char Receiver_CTL[15];
extern int ctl_Pos;
extern char PowerState;

int gyro_pos=0;
int IsGyrohead=0;
unsigned char Gyrodata[100];
unsigned char gyrostrTemp[20];

extern void mDelay1_2uS( );

void Delay (unsigned long time)
{
  while (--time!=0);
}

//******************************************************************/
//*function: input data
//*input   : data: data
//******************************************************************/
unsigned char InputData(void)
{
  unsigned long ldata;
  unsigned char m_data;
  AT91F_PIO_CfgInput(AT91C_BASE_PIOA, D0|D1|D2|D3|D4|D5|D6|D7);
  ldata=*AT91C_PIOA_PDSR;  //read st16c2550 
  m_data=0xff;
  if((ldata & D0)==0)
    m_data=m_data&0xfe;
  if((ldata & D1)==0)
     m_data=m_data&0xfd;   
   if((ldata & D2)==0)
    m_data=m_data&0xfb;
  if((ldata & D3)==0)
     m_data=m_data&0xf7;  
  if((ldata & D4)==0)
    m_data=m_data&0xef;
  if((ldata & D5)==0)
     m_data=m_data&0xdf;   
   if((ldata & D6)==0)
    m_data=m_data&0xbf;
  if((ldata & D7)==0)
     m_data=m_data&0x7f;    
  return (m_data);
}


//******************************************************************/
//*function: output data
//*input   : data: data
//******************************************************************/
void OutputData(unsigned char data)
{
//    unsigned char data=dat;
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, D0|D1|D2|D3|D4|D5|D6|D7);
    if ((data & 0x01) ==0)
      *AT91C_PIOA_CODR|= D0;
    else
      *AT91C_PIOA_SODR|= D0;
    if ((data & 0x02) ==0)
      *AT91C_PIOA_CODR|= D1;
    else
      *AT91C_PIOA_SODR|= D1;
    if ((data & 0x04) ==0)
      *AT91C_PIOA_CODR|= D2;
    else
      *AT91C_PIOA_SODR|= D2;
    if ((data & 0x08)==0)
      *AT91C_PIOA_CODR|= D3;
    else
      *AT91C_PIOA_SODR|= D3;
    if ((data & 0x10) ==0)
      *AT91C_PIOA_CODR|= D4;
    else
      *AT91C_PIOA_SODR|= D4;
    if ((data & 0x20) ==0)
      *AT91C_PIOA_CODR|= D5;
    else
      *AT91C_PIOA_SODR|= D5;
    if ((data & 0x40) ==0)
      *AT91C_PIOA_CODR|= D6;
    else
      *AT91C_PIOA_SODR|= D6;
    if ((data & 0x80) ==0)
      *AT91C_PIOA_CODR|= D7;
    else
      *AT91C_PIOA_SODR|= D7;
}
/* A port
receiver register address is 0x00
transmit register address is 0x00
interrupt enable register address is 0x01
interrupt status register and FIFO control register address is 0x02
line control register address is 0x03 
modem control register address is 0x04
line status register address is 0x05
modem status register address is 0x06
initial is 9600,n,8,1
*/

void InitST16C2550(void)
{
//port A
       *AT91C_PIOA_SODR|=(A0|A1);
        *AT91C_PIOA_CODR|=(A2);
        *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0XB3);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);
       
         *AT91C_PIOA_CODR|=(A0|A1|A2);
        *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X06);//波特率
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);     
        
         *AT91C_PIOA_CODR|=(A1|A2);
         *AT91C_PIOA_SODR|=(A0);
         *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X00);       //baud rate register L
         *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);
               
        *AT91C_PIOA_SODR|=(A0|A1);//LCR
        *AT91C_PIOA_CODR|=(A2);
        *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X33);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);
 
  /*      *AT91C_PIOA_CODR|=(A0|A2);//write FCR register
        *AT91C_PIOA_SODR|=(A1);
        *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X01);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);      
        
    */    
        
          *AT91C_PIOA_CODR|=(A1|A2);//IER
         *AT91C_PIOA_SODR|=(A0);
         *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X01);       // interrupt enable register address 0x03
         *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);       
	

        *AT91C_PIOA_CODR|=(A1|A0);//MCR 
         *AT91C_PIOA_SODR|=(A2);
         *AT91C_PIOA_CODR|=(CSA);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X08);       //中断能使
         *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSA);       
     
	
//port B	
       *AT91C_PIOA_SODR|=(A0|A1);//LCR bit7=1 设置波特率
        *AT91C_PIOA_CODR|=(A2);
        *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0XB3);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSB);
       
         *AT91C_PIOA_CODR|=(A0|A1|A2);//DLL 
        *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X06);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSB);     
        
         *AT91C_PIOA_CODR|=(A1|A2);//DLM
         *AT91C_PIOA_SODR|=(A0);
         *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X00);       //baud rate register L
         *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSB);
               
        *AT91C_PIOA_SODR|=(A0|A1);//LCR
        *AT91C_PIOA_CODR|=(A2);
        *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X33);//line control register address 
        *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSB);
        
          *AT91C_PIOA_CODR|=(A1|A2);//IER
         *AT91C_PIOA_SODR|=(A0);
         *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X01);       // interrupt enable register address 0x03
         *AT91C_PIOA_SODR|=(IOW);
        *AT91C_PIOA_SODR|=(CSB);       
	

         *AT91C_PIOA_CODR|=(A1|A0);//MCR
         *AT91C_PIOA_SODR|=(A2);
         *AT91C_PIOA_CODR|=(CSB);
        *AT91C_PIOA_CODR|=(IOW);
        OutputData(0X08);       //modem control register address
         *AT91C_PIOA_SODR|=(IOW);
         *AT91C_PIOA_SODR|=(CSB); 
         
        
         
         
         *AT91C_PIOA_CODR|=(A0|A2);      //clear RHR
         *AT91C_PIOA_SODR|=(A1);
         *AT91C_PIOA_CODR|=(CSA);
         *AT91C_PIOA_CODR|=(IOR);
         InputData();      
         *AT91C_PIOA_SODR|=(IOR);
         *AT91C_PIOA_SODR|=(CSA);       
         
        *AT91C_PIOA_CODR|=(A0|A2);      //clear RHR
         *AT91C_PIOA_SODR|=(A1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -