1 Configuration statique :
10 UARTx_TX_FIFO_SIZE uint8_t
11 UARTx_RX_FIFO_SIZE uint8_t
14 UARTx_DEFAULT_BAUDRATE uint32_t
16 UARTx_DEFAULT_9BITS/UARTx_DEFAULT_8BITS/UARTx_DEFAULT_7BITS/UARTx_DEFAULT_6BITS/UARTx_DEFAULT_5BITS
18 UARTx_DEFAULT_NO_PARITY/UARTx_DEFAULT_PARITY_ODD/UARTx_DEFAULT_PARITY_EVEN
20 UARTx_DEFAULT_1_STOP_BIT/UARTx_DEFAULT_2_STOP_BIT
24 ------------------------------------------------------
26 Configuration dynamique :
30 Modification et lecture de la vitesse de transmission. Le set retourne
31 0 en cas de succès, ou un code d'erreur si la vitesse ne peut être
34 uint8_t uart_set_baudrate(uint32_t)
35 uint32_t uart_get_baudrate()
39 Modification de la parité. Elle est exécutée en hard sur les USART
40 mais elle devra être effectuée en soft sur les uart (9e
41 bit). set_parity retourne 0 en cas de succès.
43 uint8_t uart_set_parity(NO_PARITY/PARITY_ODD/PARITY_EVEN)
44 uint8_t uart_get_parity()
48 Modification du nombre de bits de stop. Executé en hard sur les USART,
49 il doit être effectué en soft sinon. Il est à savoir qu'il n'est pas
50 possible avec un uart d'avoir plus d'une de ces options :9bits,
51 2bits_stop, parité, car tout est géré avec le 9e bit. Il est par
52 contre envisageable d'avoir une combinaison : 7bits + parité + 2 bits
53 stop. En même temps, les AVR avec uart sont de plus en plus rare, il
54 n'est peut-etre pas nécessaire de s'embeter avec ça.
56 uint8_t uart_set_1_stop_bit()
57 uint8_t uart_set_2_stop_bit()
58 uint8_t uart_get_stop_bit()
61 Ajoute une fonction appelée sur un évènement tx ou rx. Si on l'appelle
62 avec un pointeur nul, aucune fonction n'est appelée. data_size est un
63 uint8_t ou un uint16_t, selon la taille des données.
65 uint8_t uart_register_tx_event(void (*f)(data_size))
66 uint8_t uart_register_rx_event(void (*f)(data_size))
68 ------------------------------------------------------------------
72 Voici un apperçu des caractéristiques de quelques AVR:
74 at90s2313 et at90s8515 :
77 9bits ou parité ou stop supplémentaire
78 UCR (uart control register) et USR (status)
83 pareil, mais avec en plus double speed
84 et comm multiprocesseur
90 URSEL pour acceder à UBRRH ou UCSRC
92 parité et bits stop natifs
97 pareil, mais en double, et sans le URSEL
102 Résultat des courses, pour la fonction d'init, il faut séparer
105 D'abord, définissons des caractéristiques pour chaque processeur :
114 UART_UCSR (implique U2X ?)
119 UART_USART (a priori, implique 56789 bits,parité et stop natifs + u2x)
128 Dans l'init, on a donc :
130 init générique : ports, fifos
132 #if defined(UART_SIMPLE) && defined(UART_UCR_USR)
133 uart_init_simple_ucr_usr()
134 #elif defined(UART_SIMPLE) && defined(UART_UCSR)
135 uart_init_simple_ucsr()
136 #elif !defined(UART_DOUBLE)
139 uart_init_double_usart()
145 puis dans chaque fonction d'init, on a :
147 #if defined(UART_TX_ENABLED) && defined(UART_RX_ENABLED)
150 config selon 5/6/7/8/9 bits + parité + stop
159 Concernant la parité, et les bits de stop :
160 - Il faudra implémenter des fonctions sur les uC ne disposant pas de
161 ces options en natif. Pour l'instant, il me semble que ce n'est pas
162 hyper important : d'une part c'est peu utilisé, d'autre part, il faut
163 pouvoir être averti (en réception) qu'il y a eu une erreur (que ce
164 soit une erreur de parité, overrun ou frame error d'ailleurs). Je
165 pense qu'il serait bien de fournir des fonctions du genre :
167 uint8_t uart_udr_get() // lit le registre udr, bêtement <=> toto=UDR
168 uint8_t uart_udr_get_check_errors(&errors) // lit le registre udr, et
169 place un indicateur d'erreurs
172 Voilà, il ne reste plus qu'à coder, le gros du boulot est fait.