ZDBMS/code_drv/Uart.c

321 lines
8.2 KiB
C
Raw Normal View History

2025-02-06 07:35:32 +00:00
/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V0.0
Date: 2020/04/26
History:
V2.0 2020/04/26 Preliminary
********************************************************************************/
#include "Main.h"
#if (UART0_DEFINE != 0)
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UART0Init
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Bps: UARTͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>UART0ģ<EFBFBD><EFBFBD>
*************************************************************************************************/
void UART0Init(void)
{
#if UART0_DEFINE == 1
UART0CR = 0x32;
#elif UART0_DEFINE == 2
UART0CR = 0x42;
#elif UART0_DEFINE == 3
UART0CR = 0x52;
#elif UART0_DEFINE == 4
UART0CR = 0x02;
#elif UART0_DEFINE == 5
UART0CR = 0x12;
#elif UART0_DEFINE == 6
UART0CR = 0x23;
#elif UART0_DEFINE == 7
UART0CR = 0x43;
#elif UART0_DEFINE == 8
UART0CR = 0x53;
#elif UART0_DEFINE == 9
UART0CR = 0x03;
#elif UART0_DEFINE == 10
UART0CR = 0x13;
#elif UART0_DEFINE == 11
UART0CR = 0x24;
#elif UART0_DEFINE == 12
UART0CR = 0x34;
#elif UART0_DEFINE == 13
UART0CR = 0x54;
#elif UART0_DEFINE == 14
UART0CR = 0x04;
#elif UART0_DEFINE == 15
UART0CR = 0x14;
#elif UART0_DEFINE == 16
UART0CR = 0x25;
#elif UART0_DEFINE == 17
UART0CR = 0x35;
#elif UART0_DEFINE == 18
UART0CR = 0x45;
#elif UART0_DEFINE == 19
UART0CR = 0x05;
#elif UART0_DEFINE == 20
UART0CR = 0x15;
#elif UART0_DEFINE == 21
UART0CR = 0x30;
#elif UART0_DEFINE == 22
UART0CR = 0x40;
#elif UART0_DEFINE == 23
UART0CR = 0x50;
#elif UART0_DEFINE == 24
UART0CR = 0x20;
#elif UART0_DEFINE == 25
UART0CR = 0x10;
#elif UART0_DEFINE == 26
UART0CR = 0x31;
#elif UART0_DEFINE == 27
UART0CR = 0x41;
#elif UART0_DEFINE == 28
UART0CR = 0x51;
#elif UART0_DEFINE == 29
UART0CR = 0x01;
#elif UART0_DEFINE == 30
UART0CR = 0x21;
#else
#Error: "UART0_DEFINE ERROR"
#endif
{
U16 TempVal;
PCON = 0x00;
SCON = 0x50; //<2F><><EFBFBD><EFBFBD>Uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ1
// SBRTH = UART_BPS_H;
// SBRTL = UART_BPS_L;
// SFINE = UART_BPS_F;
TempVal = 32768 - (U16)(8000000 / 16 / 9600); //<2F><><EFBFBD>ʽ<E3B9AB><CABD>(int)X=FSY/(16*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) ; SBRT=32768-X ; SFINE=<3D><>FSY/<2F><><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>-16*X FSY=24M
SBRTH = TempVal / 256;
SBRTL = TempVal % 256;
SFINE = (float)8000000 / 9600 - (16 * (32768 - TempVal));
SBRTH |= 0x80; //ʹ<>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>
SADDR = UART_SLAVE_SADDR; //UART<52><54>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ0x0A
SADEN = 0xFF;
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: InterruptUART0
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: UART0<EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void InterruptUART0(void) interrupt 4
{
U8 xdata RxData;
_push_(INSCON);
McuBank0Sel();
if(RI) //RT1 interrupt means MCU recept data though UART
{
RI = 0;
RxData = SBUF;
2025-02-08 07:27:19 +00:00
InterruptUart0AppRx(RxData); //<2F><>ӱЭ<D3B1><D0AD>
2025-02-06 07:35:32 +00:00
}
if(TI)
{
2025-02-07 03:00:30 +00:00
TI = 0;
InterruptUart0AppTx(); //<2F><>ӱЭ<D3B1><D0AD>
2025-02-06 07:35:32 +00:00
}
_pop_(INSCON);
}
#endif
#if (UART1_DEFINE != 0)
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UART1Init
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Bps: UARTͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>UART1ģ<EFBFBD><EFBFBD>
*************************************************************************************************/
void UART1Init(void)
{
// U16 TempVal;
_push_(INSCON);
McuBank0Sel();
#if UART1_DEFINE == 1
UART1CR = 0x10;
#elif UART1_DEFINE == 2
UART1CR = 0x40;
#elif UART1_DEFINE == 3
UART1CR = 0x50;
#elif UART1_DEFINE == 4
UART1CR = 0x20;
#elif UART1_DEFINE == 5
UART1CR = 0x30;
#elif UART1_DEFINE == 6
UART1CR = 0x01;
#elif UART1_DEFINE == 7
UART1CR = 0x41;
#elif UART1_DEFINE == 8
UART1CR = 0x51;
#elif UART1_DEFINE == 9
UART1CR = 0x21;
#elif UART1_DEFINE == 10
UART1CR = 0x31;
#elif UART1_DEFINE == 11
UART1CR = 0x04;
#elif UART1_DEFINE == 12
UART1CR = 0x14;
#elif UART1_DEFINE == 13
UART1CR = 0x54;
#elif UART1_DEFINE == 14
UART1CR = 0x24;
#elif UART1_DEFINE == 15
UART1CR = 0x34;
#elif UART1_DEFINE == 16
UART1CR = 0x05;
#elif UART1_DEFINE == 17
UART1CR = 0x15;
#elif UART1_DEFINE == 18
UART1CR = 0x45;
#elif UART1_DEFINE == 19
UART1CR = 0x25;
#elif UART1_DEFINE == 20
UART1CR = 0x35;
#elif UART1_DEFINE == 21
UART1CR = 0x02;
#elif UART1_DEFINE == 22
UART1CR = 0x12;
#elif UART1_DEFINE == 23
UART1CR = 0x42;
#elif UART1_DEFINE == 24
UART1CR = 0x52;
#elif UART1_DEFINE == 25
UART1CR = 0x32;
#elif UART1_DEFINE == 26
UART1CR = 0x03;
#elif UART1_DEFINE == 27
UART1CR = 0x13;
#elif UART1_DEFINE == 28
UART1CR = 0x43;
#elif UART1_DEFINE == 29
UART1CR = 0x53;
#elif UART1_DEFINE == 30
UART1CR = 0x23;
#else
#Error: "UART1_DEFINE ERROR"
#endif
{
McuBank1Sel();
PCON1 = 0x00;
SCON1 = 0x50; //<2F><><EFBFBD><EFBFBD>Uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ1
SBRTH1 = UART_BPS_H;
SBRTL1 = UART_BPS_L;
SFINE1 = UART_BPS_F;
SBRTH1 |= 0x80; //ʹ<>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>
SADDR1 = UART_SLAVE_SADDR; //UART<52><54>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ0x0A
SADEN1 = 0xFF;
McuBank0Sel();
}
_pop_(INSCON);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: InterruptUart1
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: UART1<EFBFBD><EFBFBD><EFBFBD>պͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
InterruptUart1AppRx(RxData)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
InterruptUart1AppTx()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void InterruptUart1(void) interrupt 15
{
U8 xdata RxData;
_push_(INSCON);
McuBank1Sel();
if(RI1)
{
RI1 = 0;
RxData = SBUF1;
McuBank0Sel(); //<2F><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>BANK0
InterruptUart1AppRx(RxData);
}
McuBank1Sel();
if(TI1)
{
TI1 = 0;
McuBank0Sel(); //<2F><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>BANK0
InterruptUart1AppTx();
}
_pop_(INSCON);
}
#endif
#if (UART2_DEFINE != 0)
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: UART2Init
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Bps: UARTͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>UART2ģ<EFBFBD><EFBFBD>
*************************************************************************************************/
void UART2Init(void)
{
{
McuBank1Sel();
PCON2 = 0x00;
SCON2 = 0x50; //<2F><><EFBFBD><EFBFBD>Uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ1
SBRTH2 = UART_BPS_H;
SBRTL2 = UART_BPS_L;
SFINE2 = UART_BPS_F;
SBRTH2 |= 0x80; //ʹ<>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>
SADDR2 = UART_SLAVE_SADDR; //UART<52><54>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ0x0A
SADEN2 = 0xFF;
McuBank0Sel();
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: InterruptUart2
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: UART2<EFBFBD><EFBFBD><EFBFBD>պͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
InterruptUart2AppRx(RxData)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
InterruptUart2AppTx()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void InterruptUart2(void) interrupt 16
{
U8 xdata RxData;
_push_(INSCON);
McuBank1Sel();
if(RI2)
{
RI2 = 0;
RxData = SBUF2;
McuBank0Sel(); //<2F><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>BANK0
InterruptUart2AppRx(RxData);
}
McuBank1Sel();
if(TI2)
{
TI2 = 0;
McuBank0Sel(); //<2F><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>BANK0
InterruptUart2AppTx();
}
_pop_(INSCON);
}
#endif