X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=target%2Fserial%2Fserial.c;h=2939042635ca84d48e0ea586d9fa6d518ea9d1cd;hb=d9fd548db15232e3a8823815962b252c7a5e7cba;hp=d2be47fdeb1ed7cd9f53dce9b3e8d9ae258691fa;hpb=50bdc2407c674a4770912d3a626f36820a7f1527;p=fw%2Faltos diff --git a/target/serial/serial.c b/target/serial/serial.c index d2be47fd..29390426 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) @@ -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,11 +202,12 @@ 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_SPB_2_STOP_BITS | UxUCR_STOP_HIGH | UxUCR_START_LOW); } @@ -201,9 +216,18 @@ void usart_out_byte(uint8_t byte) { U1DBUF = byte; - while ((U1CSR & UxCSR_TX_BYTE) == 0) + while (!UTX1IF) ; - U1CSR &= ~UxCSR_TX_BYTE; + UTX1IF = 0; +} + +void +usart_out_string(uint8_t *string) +{ + uint8_t b; + + while (b = *string++) + usart_out_byte(b); } uint8_t @@ -217,26 +241,30 @@ 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() +void +debug_byte(uint8_t byte) +{ + uint8_t s; -static char string[] = "hello world\r\n"; + for (s = 0; s < 8; s++) { + DEBUG = byte & 1; + delay(5); + byte >>= 1; + } +} main () { - uint8_t i; - P1DIR |= 2; CLKCON = 0; while (!(SLEEP & SLEEP_XOSC_STB)) ; - spi_init(); + usart_init(); for (;;) { - usart_out_byte('A'); - delay(5); - P1 ^= 2; + usart_out_string("hello world\r\n"); + debug_byte(usart_in_byte()); } + }