Better API for baud setting for smartcard communication.

This commit is contained in:
NIIBE Yutaka
2019-04-25 11:08:46 +09:00
parent d22ffb2d07
commit 3199ac7aae
3 changed files with 35 additions and 6 deletions

View File

@@ -1,3 +1,11 @@
2019-04-25 NIIBE Yutaka <gniibe@fsij.org>
* 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 <gniibe@fsij.org> 2019-04-24 NIIBE Yutaka <gniibe@fsij.org>
* mcu/sys-stm32l4.c: New. * mcu/sys-stm32l4.c: New.

View File

@@ -156,20 +156,35 @@ static const struct brr_setting brr_table[] = {
{ B230400, ( 9 << 4)|12}, { B230400, ( 9 << 4)|12},
{ B460800, ( 4 << 4)|14}, { B460800, ( 4 << 4)|14},
{ B921600, ( 2 << 4)|7}, { 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 int
usart_config_brr (uint8_t dev_no, uint16_t brr_value) usart_config_baud (uint8_t dev_no, uint8_t baud_spec)
{ {
struct USART *USARTx = get_usart_dev (dev_no); struct USART *USARTx = get_usart_dev (dev_no);
uint32_t save_bits; 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); save_bits = USARTx->CR1 & (USART_CR1_TE | USART_CR1_RE);
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; USARTx->CR1 |= save_bits;
return 0;
} }
static void static void

View File

@@ -11,7 +11,13 @@
#define B230400 26 #define B230400 26
#define B460800 27 #define B460800 27
#define B921600 28 #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 #define MASK_BAUD 0x3f
/* POSIX supports 5, 6. USB suppots 16 */ /* 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); const struct usart_stat *usart_stat (uint8_t dev_no);
int usart_send_break (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_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); 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); int usart_read_ext (uint8_t dev_no, char *buf, uint16_t buflen, uint32_t *timeout_p);