From 8e0ffb6f84b807bf5d8cbcb511d7ab9aab7e3a7b Mon Sep 17 00:00:00 2001 From: TiagoRG Date: Fri, 17 May 2024 10:58:02 +0100 Subject: [PATCH] [AC2] Add Aula11 Signed-off-by: TiagoRG --- 2ano/2semestre/ac2/aula11/AC2-P-Aula11.pdf | Bin 0 -> 51026 bytes 2ano/2semestre/ac2/aula11/part1.c | 50 +++++++ 2ano/2semestre/ac2/aula11/part2.c | 57 ++++++++ 2ano/2semestre/ac2/aula11/part3.c | 155 +++++++++++++++++++++ 4 files changed, 262 insertions(+) create mode 100644 2ano/2semestre/ac2/aula11/AC2-P-Aula11.pdf create mode 100644 2ano/2semestre/ac2/aula11/part1.c create mode 100644 2ano/2semestre/ac2/aula11/part2.c create mode 100644 2ano/2semestre/ac2/aula11/part3.c diff --git a/2ano/2semestre/ac2/aula11/AC2-P-Aula11.pdf b/2ano/2semestre/ac2/aula11/AC2-P-Aula11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..777a6ff3b36fb736d5e9ad40175c9c027191d26a GIT binary patch literal 51026 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 J2?a^?{{f-3;MM>D literal 0 HcmV?d00001 diff --git a/2ano/2semestre/ac2/aula11/part1.c b/2ano/2semestre/ac2/aula11/part1.c new file mode 100644 index 0000000..9dbb187 --- /dev/null +++ b/2ano/2semestre/ac2/aula11/part1.c @@ -0,0 +1,50 @@ +#include + +int main() { + TRISCbits.TRISC14 = 0; + + U2BRG = ((PBCLK + 8 * 115200) / (16 * 115200)) - 1; + U2MODEbits.BRGH = 0; // 16x baud clock enabled (1 -> 4x baud clock) + + U2MODEbits.PDSEL = 00; // 8 data bits, without parity + U2MODEbits.STSEL = 0; // 1 stop bit + + U2STAbits.URXEN = 1; // Enable Receiver + U2STAbits.UTXEN = 1; // Enable Transmitter + + IEC1bits.U2RXIE = 1; + IEC1bits.U2TXIE = 0; + IPC8bits.U2IP = 2; + IFS1bits.U2RXIF = 0; + + U2MODEbits.ON = 1; + + EnableInterrupts(); + + while (1); + return 0; +} + +void putc(char byte) { + // wait while UTXBF == 1 + while (U2STAbits.UTXBF == 1); + // Copy byte to the UxTXREG register + U2TXREG = byte; +} + +void _int_(32) isr_uart2rx() { + // If OERR == 1 then reset OERR + if (U2STAbits.OERR == 1) + U2STAbits.OERR = 0; + // Wait while URXDA == 0 + while (U2STAbits.URXDA == 0); + // Save U2RXREG value + char c = U2RXREG; + + if (c == 'T') LATCbits.LATC14 = 1; + else if (c == 't') LATCbits.LATC14 = 0; + + putc(c); + + IFS1bits.U2RXIF = 0; +} diff --git a/2ano/2semestre/ac2/aula11/part2.c b/2ano/2semestre/ac2/aula11/part2.c new file mode 100644 index 0000000..f8dc68a --- /dev/null +++ b/2ano/2semestre/ac2/aula11/part2.c @@ -0,0 +1,57 @@ +#include "p32mx795f512h.h" +#include + +volatile struct { + char mem[100]; + int nchar; + int posrd; +} txbuf; + +void putStrInt(char *s) { + while (txbuf.nchar > 0); + + while (*s != '\0') + txbuf.nchar++[txbuf.mem] = *s++; + + txbuf.posrd = 0; + IEC1bits.U2TXIE = 1; +} + +int main() { + U2BRG = ((PBCLK + 8 * 115200) / (16 * 115200)) - 1; + U2MODEbits.BRGH = 0; // 16x baud clock enabled (1 -> 4x baud clock) + + U2MODEbits.PDSEL = 00; // 8 data bits, without parity + U2MODEbits.STSEL = 0; // 1 stop bit + + U2STAbits.URXEN = 1; // Enable Receiver + U2STAbits.UTXEN = 1; // Enable Transmitter + + IEC1bits.U2RXIE = 0; + IEC1bits.U2TXIE = 0; + IPC8bits.U2IP = 2; + IFS1bits.U2TXIF = 0; + U2STAbits.UTXISEL = 00; + + U2MODEbits.ON = 1; + + EnableInterrupts(); + txbuf.nchar = 0; + + while (1) { + putStrInt("Test string which can be as long as you like, up to a maximum of 100 characters\n"); + } + + return 0; +} + +void _int_(32) isr_uart2tx() { + if (!IFS1bits.U2TXIF) return; + if (txbuf.nchar-- > 0) { + U2TXREG = txbuf.posrd++[txbuf.mem]; + } else { + IEC1bits.U2TXIE = 0; + } + + IFS1bits.U2TXIF = 0; +} diff --git a/2ano/2semestre/ac2/aula11/part3.c b/2ano/2semestre/ac2/aula11/part3.c new file mode 100644 index 0000000..d09a971 --- /dev/null +++ b/2ano/2semestre/ac2/aula11/part3.c @@ -0,0 +1,155 @@ +#include + +#define SAMPLES 4 + +volatile int voltage = 0; +volatile int voltMin = 33; +volatile int voltMax = 0; + +const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, + 0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC, + 0x39, 0x5E, 0xF9, 0xF1}; + +typedef enum { HIGH, LOW } display; + +unsigned char toBdc(unsigned char value) { + return ((value / 10) << 4) + (value % 10); +} + +void send2displays(unsigned char value) { + static display flag = LOW; + unsigned char high = dis7Scodes[value >> 4]; + unsigned char low = dis7Scodes[value & 0x0F]; + + if (flag == HIGH) { + LATD = (LATD & 0xFF9F) | 0x0040; + LATB = (LATB & 0x80FF) | high << 8; + flag = LOW; + } else { + LATD = (LATD & 0xFF9F) | 0x0020; + LATB = (LATB & 0x80FF) | low << 8; + flag = HIGH; + } +} + +void putc(char byte) { + // wait while UTXBF == 1 + while (U2STAbits.UTXBF == 1); + // Copy byte to the UxTXREG register + U2TXREG = byte; +} + +void putstr(char *str) { + // use putc() function to send each charater ('\0' should not be sent) + while (*str != '\0') putc(*str++); +} + + +int main() { + TRISB &= 0x80FF; + TRISD &= 0xFF9F; + + TRISBbits.TRISB4 = 1; + AD1PCFGbits.PCFG4 = 0; + AD1CON1bits.SSRC = 7; + AD1CON1bits.CLRASAM = 1; + AD1CON3bits.SAMC = 16; + AD1CON2bits.SMPI = SAMPLES - 1; + AD1CHSbits.CH0SA = 4; + AD1CON1bits.ON = 1; + + IPC6bits.AD1IP = 2; + IFS1bits.AD1IF = 0; + IEC1bits.AD1IE = 1; + + // Configure Timer T1 with 5Hz frequency + T1CONbits.TCKPS = 2; + PR1 = 62499; + TMR1 = 0; + T1CONbits.TON = 1; + + // Configure Timer T3 with 100Hz frequency + T3CONbits.TCKPS = 2; + PR3 = 49999; + TMR3 = 0; + T3CONbits.TON = 1; + + IPC1bits.T1IP = 2; + IFS0bits.T1IF = 0; + IEC0bits.T1IE = 1; + + IPC3bits.T3IP = 2; + IFS0bits.T3IF = 0; + IEC0bits.T3IE = 1; + + U2BRG = ((PBCLK + 8 * 115200) / (16 * 115200)) - 1; + U2MODEbits.BRGH = 0; // 16x baud clock enabled (1 -> 4x baud clock) + + U2MODEbits.PDSEL = 00; // 8 data bits, without parity + U2MODEbits.STSEL = 0; // 1 stop bit + + U2STAbits.URXEN = 1; // Enable Receiver + U2STAbits.UTXEN = 1; // Enable Transmitter + + IEC1bits.U2RXIE = 1; + IEC1bits.U2TXIE = 0; + IPC8bits.U2IP = 2; + IFS1bits.U2RXIF = 0; + + U2MODEbits.ON = 1; + + EnableInterrupts(); + while (1); + + return 0; +} + +void _int_(4) isr_T1(void) { + AD1CON1bits.ASAM = 1; + IFS0bits.T1IF = 0; +} + +void _int_(12) isr_T3(void) { + send2displays(toBdc(voltage)); + IFS0bits.T3IF = 0; +} + +void _int_(27) isr_adc(void) { + int *p = (int *)(&ADC1BUF0); + int media = 0; + for (; p <= (int *)(&ADC1BUFF); p++) + media += *p; + media /= SAMPLES; + voltage = (media * 33 + 511) / 1023; + voltMin = voltage < voltMin ? voltage : voltMin; + voltMax = voltage > voltMax ? voltage : voltMax; + IFS1bits.AD1IF = 0; +} + +void _int_(32) isr_uart2rx() { + // If OERR == 1 then reset OERR + if (U2STAbits.OERR == 1) + U2STAbits.OERR = 0; + // Save U2RXREG value + char c = U2RXREG; + + if (c == 'M') { + char v = toBdc(voltMax); + putstr("VMax="); + putc((v >> 4) + 0x30); + putc('.'); + putc((v & 0x0F) + 0x30); + putc('V'); + putc('\n'); + } else if (c == 'm') { + char v = toBdc(voltMin); + putstr("VMin="); + putc((v >> 4) + 0x30); + putc('.'); + putc((v & 0x0F) + 0x30); + putc('V'); + putc('\n'); + } + + IFS1bits.U2RXIF = 0; +}