/* \file main.c \brief Main file of the project. (c) 2020 Microchip Technology Inc. and its subsidiaries. Subject to your compliance with these terms, you may use Microchip software and any derivatives exclusively with Microchip products. It is your responsibility to comply with third party license terms applicable to your use of third party software (including open source software) that may accompany Microchip software. THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. */ #define F_CPU 3333333UL #define USART3_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5) #define MAX_COMMAND_LEN 8 #define INIT_DELAY 10 /* Delay to invalidate the after-reset noise on the PC0 pin (TX) */ #include #include #include #include void USART3_init(void); void USART3_sendChar(char c); void USART3_sendString(char *str); char USART3_readChar(void); void LED_on(void); void LED_off(void); void LED_init(void); void executeCommand(char *command); void USART3_init(void) { USART3.BAUD = (uint16_t)USART3_BAUD_RATE(9600); USART3.CTRLB |= USART_RXEN_bm | USART_TXEN_bm; PORTB.DIR |= PIN0_bm; PORTB.DIR &= ~PIN1_bm; } void USART3_sendChar(char c) { while (!(USART3.STATUS & USART_DREIF_bm)) { ; } USART3.TXDATAL = c; } void USART3_sendString(char *str) { for(size_t i = 0; i < strlen(str); i++) { USART3_sendChar(str[i]); } } char USART3_readChar(void) { while (!(USART3.STATUS & USART_RXCIF_bm)) { ; } return USART3.RXDATAL; } void LED_on(void) { PORTF.OUT &= ~PIN5_bm; } void LED_off(void) { PORTF.OUT |= PIN5_bm; } void LED_init(void) { PORTF.DIR |= PIN5_bm; LED_off(); } void executeCommand(char *command) { if(strcmp(command, "ON") == 0) { LED_on(); USART3_sendString("OK, LED ON.\r\n"); } else if (strcmp(command, "OFF") == 0) { LED_off(); USART3_sendString("OK, LED OFF.\r\n"); } else { USART3_sendString("Type ON/OFF to control the LED.\r\n"); } } int main(void) { PORTF_DIR &= ~PIN6_bm; char command[MAX_COMMAND_LEN]; uint8_t index = 0; char c; /* This delay invalidates the initial noise on the TX line, after device reset. */ _delay_ms(10); USART3_init(); LED_init(); LED_on(); USART3_sendString("Type ON/OFF to control the LED.\r\n"); _delay_ms(1000); LED_off(); _delay_ms(1000); while (1) { if(!(PORTF.IN & PIN6_bm)){ LED_on(); _delay_ms(1000); LED_off(); } LED_on(); _delay_ms(100); LED_off(); _delay_ms(250); /* c = USART3_readChar(); if(c != '\n' && c != '\r') { command[index++] = c; if(index > MAX_COMMAND_LEN) { index = 0; } } if(c == '\r') { command[index] = '\0'; index = 0; executeCommand(command); } */ } }