Merge pull request 'Add UART functionality' (#11) from add-uart into main

Reviewed-on: #11
This commit is contained in:
Athamantis 2024-03-06 14:56:49 +00:00
commit d84c565985
5 changed files with 83 additions and 9 deletions

4
.gitignore vendored
View File

@ -26,4 +26,6 @@
# Large Files # Large Files
*.exe *.exe
*.zip *.zip
*.pdf *.pdf
/prosjekt.X/build/
/prosjekt.X/dist/

View File

@ -5,14 +5,19 @@
* Created on March 6, 2024, 12:34 PM * Created on March 6, 2024, 12:34 PM
*/ */
#define F_CPU 4E6
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "uart.h"
#include <util/delay.h>
/* int main() {
* init_uart((uint16_t)9600);
*/ stdout = &USART_stream;
int main(int argc, char** argv) {
return (EXIT_SUCCESS);
}
while (1) {
printf("Hello, world!\n");
_delay_ms(500);
}
}

View File

@ -4,6 +4,7 @@
<logicalFolder name="HeaderFiles" <logicalFolder name="HeaderFiles"
displayName="Header Files" displayName="Header Files"
projectFiles="true"> projectFiles="true">
<itemPath>uart.h</itemPath>
</logicalFolder> </logicalFolder>
<logicalFolder name="LinkerScript" <logicalFolder name="LinkerScript"
displayName="Linker Files" displayName="Linker Files"
@ -13,6 +14,7 @@
displayName="Source Files" displayName="Source Files"
projectFiles="true"> projectFiles="true">
<itemPath>main.c</itemPath> <itemPath>main.c</itemPath>
<itemPath>uart.c</itemPath>
</logicalFolder> </logicalFolder>
<logicalFolder name="ExternalFiles" <logicalFolder name="ExternalFiles"
displayName="Important Files" displayName="Important Files"
@ -28,7 +30,7 @@
<targetDevice>AVR128DB48</targetDevice> <targetDevice>AVR128DB48</targetDevice>
<targetHeader></targetHeader> <targetHeader></targetHeader>
<targetPluginBoard></targetPluginBoard> <targetPluginBoard></targetPluginBoard>
<platformTool>noID</platformTool> <platformTool>nEdbgTool</platformTool>
<languageToolchain>XC8</languageToolchain> <languageToolchain>XC8</languageToolchain>
<languageToolchainVersion>2.45</languageToolchainVersion> <languageToolchainVersion>2.45</languageToolchainVersion>
<platform>2</platform> <platform>2</platform>

25
prosjekt.X/uart.c Normal file
View File

@ -0,0 +1,25 @@
#include "uart.h"
void init_uart(uint16_t baud) {
// Configure UART pin directions
PORTB.DIR &= ~PIN1_bm;
PORTB.DIR |= PIN0_bm;
// Set the baudrate
USART3.BAUD = (uint16_t)USART3_BAUD_RATE(baud);
// Enable UART TX & RX
USART3.CTRLB |= USART_TXEN_bm;
}
void USART3_sendChar(char c) {
// Hold the code while the UART is not ready to send
while (!(USART3.STATUS & USART_DREIF_bm)) { ; }
// UART is ready, send the character.
USART3.TXDATAL = c;
}
int USART3_printChar(char c, FILE *stream) {
USART3_sendChar(c);
return 0;
}

40
prosjekt.X/uart.h Normal file
View File

@ -0,0 +1,40 @@
/*
* File: uart.h
* Author: Sebastian H. Gabrielli
*
* Created on March 6, 2024, 3:19 PM
*/
#ifndef UART_H
#define UART_H
#ifdef __cplusplus
extern "C" {
#endif
#include <avr/io.h>
#include <stdio.h>
#ifndef F_CPU
#define F_CPU 4E6
#endif
#define USART3_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5)
// Initialize the USART3 controller
void init_uart(uint16_t baud);
// Send a single character over UART
void USART3_sendChar(char c);
// Send a string of characters over UART
int USART3_printChar(char c, FILE *stream);
static FILE USART_stream = FDEV_SETUP_STREAM(USART3_printChar, NULL, _FDEV_SETUP_WRITE);
#ifdef __cplusplus
}
#endif
#endif /* UART_H */