EE 319K�Introduction to Embedded Systems
Lecture 12: �Serial Communication (UART), �Lab 9, FIFO Queues
Bard, Erez, Cuevas, Holt, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-1
Agenda
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-2
Announcements
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
EE319K/EE319H course average estimator
GradeEstimator.xlsx in folder with lectures
12-3
Lab 8 review
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
ADC0_SAC_R = 5;
// 32 ADC sample average
12-4
Lab 8 Oversampling and Nyquist
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
main2:
startTime = NVIC_ST_CURRENT_R;
Data = ADC_In(); // sample 12-bit channel 5
stopTime = NVIC_ST_CURRENT_R;
ADCtime = ((startTime-stopTime)&0x0FFFFFF)/80;
// ADCtime is ADC_In execution time in usec
ADC0_SAC_R=0 ADCtime=8us
ADC0_SAC_R=5 ADCtime=257us
Averaging improves SNR but costs time and power
Run main5 and discover the Nyquist Theorem
Oversampling: We will sample the ADC faster than we need, and average multiple samples to get one reading. This averaging, called oversampling, will improve the signal to noise ratio.
12-5
CLT EE319H
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
Central Limit Theorem: As independent random variables are added, their sum tends toward a Normal distribution. Assume the input is constant, as more and more data are added together (averaging), the pmf of the sum (or average) will tend towards a Gaussian shape.
Run main4 on your Lab 8 and see what you get
12-6
Lab 10 preview
Lab 10 proposals
https://docs.google.com/document/d/1CaKjDjtigh_SSH7nRQqYKEKcgx83ilUT-1_nLLkrEqM/edit?usp=sharing
12-7
Lab 9 Introduction
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
<,d1,dot,d2,d3,d4,CR,>
Lab 8
Lab 9
0 to 2.000cm
0 to 2.000cm
0 to 2.000cm
12-8
Lab 9 Spring 2022
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
Connect PC5(out) to PC4(in)
<,d1,dot,d2,d3,SP,CR,>
<,d1,dot,d2,d3,SP,CR,>
0 to 2.000cm
0 to 2.000cm
0 to 2.000cm
12-9
Introduction to Communication
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
https://en.wikipedia.org/wiki/OSI_model
12-10
Physical Layer
Link Layer
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
TxD/PC5
RxD/PC4
Gnd
RxD/PC4
TxD/PC5
Gnd
How is this different from SPI to ST7735?
12-11
Universal Asynchronous Receiver/Transmitter (UART)
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
1ms
Bit time = 1ms
Baud rate = 1000 bps
12-12
Universal Asynchronous Receiver/Transmitter (UART)
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
1ms
12-13
TM4C123 LaunchPad I/O Pins
12-14
Serial I/O
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
Full duplex
Half duplex
Simplex
12-15
UART - Transmitter
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-16
UART - Transmitter
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-17
UART - Receiver
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-18
UART - Receiver
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-19
TM4C UART Setup
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-20
UART_4C123 Setup
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
// Assumes a 50 MHz bus clock, creates 115200 baud rate
void UART_Init(void){
SYSCTL_RCGCUART_R |= 0x0001; // activate UART0
SYSCTL_RCGCGPIO_R |= 0x0002; // activate port B
while((SYSCTL_PRGPIO_R&0x01) == 0){};
UART0_CTL_R &= ~0x0001; // disable UART
UART0_IBRD_R = 27;
// IBRD=int(50000000/(16*115,200)) = int(27.1267)
UART0_FBRD_R = 8;
// FBRD = round(0.1267 * 64) = 8
UART0_LCRH_R = 0x0070; // 8-bit length, enable FIFO
UART0_CTL_R = 0x0301; // enable RXE, TXE and UART
GPIO_PORTB_AFSEL_R |= 0x03; // alt funct on PB1-0
GPIO_PORTB_PCTL_R =
(GPIO_PORTB_PCTL_R&0xFFFFFF00)+0x00000011;
GPIO_PORTB_DEN_R |= 0x03; // digital I/O on PB1-0
GPIO_PORTB_AMSEL_R &= ~0x03; // No analog on PB1-0
}
80MHz
PORTC
80MHz
80MHz
PC5,4
PC5,4
PC5,4
PC5,4
UART1
12-21
TM4C UART0 – Registers
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-22
UART Synchronization
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-23
UART Busy-Wait Send/Recv
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
// Wait for new input,
// then return ASCII code
uint8_t UART_InChar(void) {
while((UART0_FR_R&0x0010) != 0);
// wait until RXFE is 0
return((uint8_t)(UART0_DR_R&0xFF));
}
// Wait for buffer to be not full,
// then output
void UART_OutChar(uint8_t data) {
while((UART0_FR_R&0x0020) != 0);
// wait until TXFF is 0
UART0_DR_R = data;
}
UART1
12-24
UART Communication
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
What data is this?
12-25
UART Interrupts
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
Make it interrupt here
Transmitter 10 Hz ISR:
Receiver ISR:
Receiver main:
<
>
d3
12-26
Summary
Bard, Erez, Cuevas, Gerstlauer, Telang, Tiwari, Valvano, Yerraballi
12-27