X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=target%2Fserial%2Fserial.c;h=1c352831dfa1d6f9e4b6c1cfe173f75cbf959e7a;hp=5acd284f58e3b97c1c1c53ade6090cf89ac45240;hb=019456a17d36f8f9f9b72cfbc980492175086d32;hpb=c35de083ca3d4f362063b056a0fd74ffe629d168 diff --git a/target/serial/serial.c b/target/serial/serial.c index 5acd284f..1c352831 100644 --- a/target/serial/serial.c +++ b/target/serial/serial.c @@ -79,6 +79,19 @@ sbit at 0x97 P1_7; sfr at 0x86 U0CSR; sfr at 0xF8 U1CSR; +/* + * IRCON2 + */ +sfr at 0xE8 IRCON2; /* CPU Interrupt Flag 5 */ + +sbit at 0xE8 USBIF; /* USB interrupt flag (shared with Port2) */ +sbit at 0xE8 P2IF; /* Port2 interrupt flag (shared with USB) */ +sbit at 0xE9 UTX0IF; /* USART0 TX interrupt flag */ +sbit at 0xEA UTX1IF; /* USART1 TX interrupt flag (shared with I2S TX) */ +sbit at 0xEA I2STXIF; /* I2S TX interrupt flag (shared with USART1 TX) */ +sbit at 0xEB P1IF; /* Port1 interrupt flag */ +sbit at 0xEC WDTIF; /* Watchdog timer interrupt flag */ + # define UxCSR_MODE_UART (1 << 7) # define UxCSR_MODE_SPI (0 << 7) # define UxCSR_RE (1 << 6) @@ -105,7 +118,7 @@ sfr at 0xfb U1UCR; # define UxUCR_SPB_1_STOP_BIT (0 << 2) # define UxUCR_SPB_2_STOP_BITS (1 << 2) # define UxUCR_STOP_LOW (0 << 1) -# define UXUCR_STOP_HIGH (1 << 1) +# define UxUCR_STOP_HIGH (1 << 1) # define UxUCR_START_LOW (0 << 0) # define UxUCR_START_HIGH (1 << 0) @@ -143,6 +156,7 @@ delay (unsigned char n) unsigned char i = 0; unsigned char j = 0; + n++; while (--n != 0) while (--i != 0) while (--j != 0) @@ -188,32 +202,24 @@ usart_init(void) /* * Reasonable serial parameters */ - U1UCR = (UxUCR_FLOW_DISABLE | - UxUCR_D9_EVEN_PARITY | + U1UCR = (UxUCR_FLUSH | + UxUCR_FLOW_DISABLE | + UxUCR_D9_ODD_PARITY | UxUCR_BIT9_8_BITS | UxUCR_PARITY_DISABLE | UxUCR_SPB_1_STOP_BIT | - UxUCR_STOP_LOW | + UxUCR_STOP_HIGH | UxUCR_START_LOW); } - -uint8_t -usart_in_out(uint8_t byte) -{ - U1DBUF = byte; - while ((U1CSR & UxCSR_TX_BYTE) == 0) - ; - U1CSR &= ~UxCSR_TX_BYTE; - return U1DBUF; -} void usart_out_byte(uint8_t byte) { - U1CSR &= ~UxCSR_TX_BYTE; U1DBUF = byte; - while ((U1CSR & UxCSR_TX_BYTE) == 0) + while (!UTX1IF) ; + UTX1IF = 0; + delay(1); } uint8_t @@ -227,10 +233,6 @@ usart_in_byte(void) return b; } -#define spi_init() usart_init() -#define spi_out_byte(b) usart_out_byte(b) -#define spi_in_byte() usart_in_byte() - static char string[] = "hello world\r\n"; main () @@ -242,12 +244,12 @@ main () while (!(SLEEP & SLEEP_XOSC_STB)) ; - spi_init(); + usart_init(); for (;;) { - for (i = 0; i < sizeof (string) - 1; i++) { + for (i = 0; i < sizeof(string) - 1; i++) usart_out_byte(string[i]); - } + delay(5); P1 ^= 2; } }