📄 com.c
字号:
#include "44b0x.h"#include "w83977.h"//extern unsigned int MCLK;#ifndef MCLK#define MCLK 60000000#endifstatic void Delay(int time){ while(time --);}//*****************************************************************************static void Ext_Funct_Reg_W( unsigned char addr, unsigned char data ){ Extend_Index_Reg = addr ; Extend_Date_Reg = data ;}//*****************************************************************************static unsigned char Ext_Funct_Reg_R( unsigned char addr ){ unsigned char d ; Extend_Index_Reg = addr ; d = Extend_Date_Reg ; return ( d ) ;}/***************************************************************************** COM ports initilization*****************************************************************************/int COM_Init( int com_port,unsigned int baudrate ) // baudrate,N,8,1{ unsigned char temp; int divisor; if((com_port >= 0)&&(com_port)){ switch(com_port){ case 0: rUFCON0 = 0x0; //disable FIFO rUMCON0 = 0x0; //disable FIFO rULCON0 = 0x3; //NO Parity?one stop bit?8bits data rUCON0 = 0x45; //TX&RX used PULSE not LEVEL trigger interrupt //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling rUBRDIV0 = (int)(MCLK/(16.0*baudrate)+0.5)-1; temp = rURXH0; break; case 1: rUFCON1 = 0x0; //disable FIFO rUMCON1 = 0x0; //disable FIFO rULCON1 = 0x3; //NO Parity?one stop bit?8bits data rUCON1 = 0x45; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling //baud *= 16; rUBRDIV1 = (int)(MCLK/(16.0*baudrate)+0.5)-1; temp = rURXH1; break; case 2: Extend_Index_Reg = 0x87 ; //Enter the extended function mode Extend_Index_Reg = 0x87 ; Delay(50000); //Configurate logical device Ext_Funct_Reg_W( W83977_CR07, 0x02 ) ; //select logical device 2 Ext_Funct_Reg_W( UARTA_CR30, 0x01 ) ; //Logical device 2 is active Ext_Funct_Reg_W( UARTA_CR60, UARTA_BaseH ) ; //Serial Port 1 I/O base address Ext_Funct_Reg_W( UARTA_CR61, UARTA_BaseL ) ; Ext_Funct_Reg_W( UARTA_CR70, 0x04 ) ; //select IRQ resource for Uart A Ext_Funct_Reg_W( UARTA_CRf0, 0x00 ) ; //UART A clock source is 1.8461Mhz (24MHz/13) Extend_Index_Reg = 0xaa ; //Exit extended function mode ////////////////////////////////////////////////////// UARTA_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(1<<7); //DBLAB=1, 8 data bits, 1 stop bit, no parity divisor = (int)(115200 / baudrate); UARTA_BLL = (unsigned char)divisor ; //BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16) UARTA_BHL = (unsigned char)(divisor >> 8) ; //BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16) UARTA_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7); //DBLAB=0, 8 data bits, 1 stop bit, no parity UARTA_HCR = 0x00 ; //handshake control UARTA_ICR = 0x00 ; //interrupt control UARTA_UFR = (1)|(1<<1)|(1<<2)|(0<<3)|(2<<6); //Fifo control break; case 3: Extend_Index_Reg = 0x87 ; //Enter the extended function mode Extend_Index_Reg = 0x87 ; Delay(50000); //Configurate logical device Ext_Funct_Reg_W( W83977_CR07, 0x03 ) ; //select logical device 3 Ext_Funct_Reg_W( UARTB_CR30, 0x01 ) ; //Logical device 2 is active Ext_Funct_Reg_W( UARTB_CR60, UARTB_BaseH ) ; //Serial Port 1 I/O base address Ext_Funct_Reg_W( UARTB_CR61, UARTB_BaseL ) ; Ext_Funct_Reg_W( UARTB_CR70, 0x04 ) ; //select IRQ resource for Uart B Ext_Funct_Reg_W( UARTB_CRf0, 0x00 ) ; //UART B clock source is 1.8461Mhz (24MHz/13) Extend_Index_Reg = 0xaa ; //Exit extended function mode //************************************************************************* UARTB_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(1<<7); //DBLAB=1, 8 data bits, 1 stop bit, no parity divisor = (int)(115200 / baudrate); UARTB_BLL = (unsigned char)divisor ; //BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16) UARTB_BHL = (unsigned char)(divisor >> 8) ; //BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16) UARTB_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7); //DBLAB=0, 8 data bits, 1 stop bit, no parity UARTB_HCR = 0x00 ; //handshake control UARTB_ICR = 0x00 ; //interrupt control UARTB_UFR = (1)|(1<<1)|(1<<2)|(0<<3)|(2<<6); //Fifo control break; } //end of switch Delay(1000); return 1; } else return 0;} /***************************************************************************** COM ports can recieving?*****************************************************************************/int COM_RecvStatus( int com_port ){ int status; status = 0; if((com_port >= 0)&&(com_port <= 3)){ switch(com_port){ case 0: if(rUTRSTAT0&0x1) status = 1; break; case 1: if(rUTRSTAT1&0x1) status = 1; break; case 2: if(UARTA_USR&0x01) status = 1; break; case 3: if(UARTB_USR&0x01) status = 1; break; } //end of switch return (status); } else return 0;}/***************************************************************************** COM ports recieving a Byte data*****************************************************************************/int COM_Receive( int com_port,char * pdata ) { if((com_port >= 0)&&(com_port <= 3)){ switch(com_port){ case 0: * pdata = (rURXH0); break; case 1: * pdata = (rURXH1); break; case 2: * pdata = (UARTA_RBR); break; case 3: * pdata = (UARTB_RBR); break; } //end of switch return 1; } else return 0;}/***************************************************************************** COM ports can transmitting?*****************************************************************************/int COM_PortStatus( int com_port ){ int status; status = 0; if((com_port >= 0)&&(com_port <= 3)){ switch(com_port){ case 0: if(rUTRSTAT0&0x2) status = 1; break; case 1: if(rUTRSTAT1&0x2) status = 1; break; case 2: if(UARTA_USR&0x40) status = 1; break; case 3: if(UARTB_USR&0x40) status = 1; break; } //end of switch return (status); } else return 0;}/***************************************************************************** transmitting a Byte data to COM port****************************************************************************/int COM_Send( int com_port,unsigned char data ) { if((com_port >= 0)&&(com_port <= 3)){ switch(com_port){ case 0: rUTXH0 = data; break; case 1: rUTXH1 = data; break; case 2: UARTA_TBR = data; break; case 3: UARTB_TBR = data; break; } //end of switch return 1; } else return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -