diff --git a/ChangeLog b/ChangeLog index 1db0bd4..a2a28bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2019-04-25 NIIBE Yutaka + + * contrib/usart.h (BSCARD1, BSCARD2...): New. + (BSCARD): Remove. + + * contrib/usart-stm32f103.c (usart_config_baud): Rename + from usart_config_brr, changing API. + 2019-04-24 NIIBE Yutaka * mcu/sys-stm32l4.c: New. diff --git a/contrib/usart-stm32f103.c b/contrib/usart-stm32f103.c index 198c5b7..7b8c464 100644 --- a/contrib/usart-stm32f103.c +++ b/contrib/usart-stm32f103.c @@ -156,20 +156,35 @@ static const struct brr_setting brr_table[] = { { B230400, ( 9 << 4)|12}, { B460800, ( 4 << 4)|14}, { B921600, ( 2 << 4)|7}, - { BSCARD, ( 234 << 4)|6}, + { BSCARD1, ( 232 << 4)|8}, /* 9677 */ + { BSCARD2, ( 116 << 4)|4}, /* 19354 */ + { BSCARD4, ( 58 << 4)|2}, /* 38709 */ + { BSCARD8, ( 29 << 4)|1}, /* 77419 */ + { BSCARD12, ( 19 << 4)|6}, /* 116129 */ + { BSCARD16, ( 14 << 4)|9}, /* 154506 */ + { BSCARD20, ( 11 << 4)|10}, /* 193548 */ }; -void -usart_config_brr (uint8_t dev_no, uint16_t brr_value) +int +usart_config_baud (uint8_t dev_no, uint8_t baud_spec) { struct USART *USARTx = get_usart_dev (dev_no); uint32_t save_bits; + int i; + + for (i = 0; i < NUM_BAUD; i++) + if (brr_table[i].baud_spec == baud_spec) + break; + + if (i >= NUM_BAUD) + return -1; save_bits = USARTx->CR1 & (USART_CR1_TE | USART_CR1_RE); USARTx->CR1 &= ~(USART_CR1_TE | USART_CR1_RE); - USARTx->BRR = brr_value; + USARTx->BRR = brr_table[i].brr_value; USARTx->CR1 |= save_bits; + return 0; } static void diff --git a/contrib/usart.h b/contrib/usart.h index af59a16..421e36c 100644 --- a/contrib/usart.h +++ b/contrib/usart.h @@ -11,7 +11,13 @@ #define B230400 26 #define B460800 27 #define B921600 28 -#define BSCARD 63 +#define BSCARD1 57 +#define BSCARD2 58 +#define BSCARD4 59 +#define BSCARD8 60 +#define BSCARD12 61 +#define BSCARD16 62 +#define BSCARD20 63 #define MASK_BAUD 0x3f /* POSIX supports 5, 6. USB suppots 16 */ @@ -73,7 +79,7 @@ int usart_write (uint8_t dev_no, char *buf, uint16_t buflen); const struct usart_stat *usart_stat (uint8_t dev_no); int usart_send_break (uint8_t dev_no); void usart_config_clken (uint8_t dev_no, int on); -void usart_config_brr (uint8_t dev_no, uint16_t brr_value); +int usart_config_baud (uint8_t dev_no, uint8_t baud_spec); void usart_read_prepare_poll (uint8_t dev_no, chopstx_poll_cond_t *poll_desc); int usart_read_ext (uint8_t dev_no, char *buf, uint16_t buflen, uint32_t *timeout_p);