/****************************************************************************** �� �� ����SCI1_UART.c ����������UARTģʽSCI1�������ļ� �� �ߣ����� �� ����V1.0 �� �ڣ�2016.11.17 ******************************************************************************/ #include "SCI1_UART.h" SCI1TxBufferStruct SCI1TxBuffer; //extern void Disp_Receive_Reply(uint8_t Data); /****************************************************************************** ��������SCI1_UART_Byte_Rx �� �ܣ�UART�ֽڽ��պ��� �ڸú����������ϲ�Ľ��պ���,�������ϲ�ָʾ�ѽ��յ�����,����������Data �� ����Data�����յ������� ����ֵ���� ******************************************************************************/ void SCI1_UART_Byte_Rx(uint8_t Data) { uint8_t Parity; Parity = SCI1SR1_PF; } /****************************************************************************** ��������SCI1_UART_Byte_Tx �� �ܣ�UART�ֽڷ��ͺ��� ��������һ�ֽ�����,���ô˺���֮ǰ,����ȷ������Buffer�ǿյ�,���������� �������ݵĶ�ʧ �� ����Data����Ҫ���͵����� ����ֵ���� ******************************************************************************/ void SCI1_UART_Byte_Tx(uint8_t Data) { SCI1DRL = Data; } /****************************************************************************** ��������SCI1_UART_Block_Tx �� �ܣ�UART�鷢�ͺ��� ��������N�ֽ�����,���ô˺���֮ǰ,����ȷ������Buffer�ǿյ�,���������� �������ݵĶ�ʧ �� ����Data����Ҫ���͵����� Len ����Ҫ���͵����ݳ��� ����ֵ���� ******************************************************************************/ void SCI1_UART_Block_Tx(uint8_t *Data, uint8_t Len) { uint8_t i; SCI1TxBuffer.Len = Len - 1; for (i = 0; i < Len; i++) SCI1TxBuffer.Data[Len - i - 1] = Data[i]; SCI1DRL = SCI1TxBuffer.Data[SCI1TxBuffer.Len]; //���͵�һ���ֽ� SCI1CR2_TIE = 1; //ʹ�ܷ���Buffer���ж� } /****************************************************************************** ��������SCI1_UART_Get_Tx_Buffer_Status �� �ܣ���ȡ����Buffer�ĵ�ǰ״̬ �� ������ ����ֵ��0 - Ŀǰû�������ڷ��� 1 - Ŀǰ�������ڷ��� ******************************************************************************/ uint8_t SCI1_UART_Get_Tx_Buffer_Status(void) { if ((SCI1SR1_TDRE != 0) && (SCI1TxBuffer.Len == 0)) return 0; return 1; } /****************************************************************************** ��������SCI1_UART_Init �� �ܣ���ʼ��SCI1ΪUARTģʽ,��������SCI1_UART.h�����õ�UART���� �� ������ ����ֵ���� ******************************************************************************/ void SCI1_UART_Init(void) { SCI1TxBuffer.Len = 0; PTHRR = SCI1_GPIO_SELECT; //----hyq--20180711 IOӳ�� SCI1BD = SCI1_BAUD_RATE_REG; SCI1CR1 = SCI1_CFG_REG; if (SCI1SR1) //��ȡSCI1SR1������жϱ�־λ nop(); SCI1CR2 = 0x2C; //�������ж�,ʹ���շ� } #pragma CODE_SEG __NEAR_SEG NON_BANKED //�������жϺ�������FLASH�ķǷ�ҳ�� /****************************************************************************** ��������SCI1_ISR �� �ܣ�SCI1�жϷ�����,���ڽ������� �� ������ ����ֵ���� ******************************************************************************/ void interrupt SCI1_ISR(void) { uint8_t SR1Reg; SR1Reg = SCI1SR1; if (SR1Reg & SCI1SR1_RDRF_MASK) //������յ����� { SCI1_UART_Byte_Rx(SCI1DRL); } else if (SR1Reg & SCI1SR1_TDRE_MASK) //�����һ�η��ͽ��� { if (SCI1TxBuffer.Len) //��������û�з������ { SCI1TxBuffer.Len--; //������һ���ֽ� SCI1DRL = SCI1TxBuffer.Data[SCI1TxBuffer.Len]; } else //����ȫ��������� SCI1CR2_TIE = 0; //�رշ���Buffer���ж� } } #pragma CODE_SEG DEFAULT