72 lines
1.6 KiB
C
72 lines
1.6 KiB
C
/*
|
|
* uart.c
|
|
*
|
|
* Created on: 15 Mar 2022
|
|
* Author: pika
|
|
*/
|
|
|
|
#include "uart.h"
|
|
#ifdef __USE_CMSIS
|
|
#include "LPC17xx.h"
|
|
#endif
|
|
|
|
|
|
|
|
void uart_init(uint32_t baudrate){
|
|
LPC_SC->PCLKSEL0 &= ~(3<<6);
|
|
|
|
LPC_SC->PCLKSEL0 |= 1<<6; // pclk set to 100 MHz
|
|
|
|
LPC_PINCON->PINSEL0 |= (1<<4); //TXD0
|
|
|
|
LPC_PINCON->PINSEL0 |= (1<<6); //RXD0
|
|
|
|
|
|
uint32_t Fdiv = (UART_PCLK)/(16*baudrate);
|
|
LPC_UART0->LCR = 0x83;
|
|
LPC_UART0->DLM = (Fdiv>>8)&0xff;
|
|
LPC_UART0->DLL = Fdiv&0xff;
|
|
|
|
LPC_UART0->LCR = 0x3;
|
|
LPC_UART0->FCR = 0x07|(2<<6);//(2<<6) to active RX trigger level
|
|
}
|
|
|
|
void uart_send(char* buff, uint32_t length){
|
|
int tmp;
|
|
while (length-- != 0 ){
|
|
LPC_UART0->THR = *buff++;
|
|
while(((LPC_UART0->LSR)&(1<<5)) == 0);//stuck in while when U1THR contains valid data
|
|
tmp = LPC_UART0->RBR;
|
|
LPC_GPIO2->FIOCLR = 0xff;
|
|
LPC_GPIO2->FIOSET = tmp;
|
|
}
|
|
|
|
}
|
|
|
|
void uart_receive_command(char* chara){
|
|
char* curr = chara;
|
|
while(((LPC_UART0->LSR)&(1)) == 0);
|
|
*curr = LPC_UART0->RBR;
|
|
//while(strncmp("\r\n",curr, 2) != 0){
|
|
while(*curr != '\n'){
|
|
if((*curr != '\n')) curr++;
|
|
while(((LPC_UART0->LSR)&(1)) == 0);
|
|
*curr = LPC_UART0->RBR;
|
|
//if(strncmp("\r\n",curr, 2) != 0) curr++;
|
|
}
|
|
}
|
|
|
|
void uart_receive_data(uint8_t* chara, int size){
|
|
//size parameter add while size != size_given
|
|
uint8_t* curr = chara;
|
|
//while(((LPC_UART0->LSR)&(1)) == 0);
|
|
for(int i = 0; i < size/2; i++){
|
|
while(((LPC_UART0->LSR)&(1)) == 0);
|
|
curr[2*i] = LPC_UART0->RBR;
|
|
while(((LPC_UART0->LSR)&(1)) == 0);
|
|
curr[2*i+1] = LPC_UART0->RBR;
|
|
//while(((LPC_UART0->LSR)&(1)) == 0);
|
|
//curr[2*i] = LPC_UART0->RBR;
|
|
}
|
|
}
|