====== Interface de Série ====== Esta biblioteca fornece funções assíncronas para uso no interface de série AVR. ===== Tipos de dados ===== * **//usart//** \\ Tipo que guarda moradas de registos de dados, estados e control de interface USART. As variáveis do tipo //usart// devem ser inicializadas no início do programa. Para as inicializações, existem funcões macro //USART//, cujo único parâmetro é o indíce do interface (0 ou 1). * **//usart_databits//** \\ Enumeração do tipo de contagem de bits. Opções: * //USART_DATABITS_5// - 5 bits de dados. * //USART_DATABITS_6// - 6 bits de dados. * //USART_DATABITS_7// - 7 bits de dados. * //USART_DATABITS_8// - 8 bits de dados. * //USART_DATABITS_9// - 9 bits de dados. * **//usart_stopbits//** \\ Enumeração do tipo de contagem dos bits de paragem. Opções: * //USART_STOPBITS_ONE// - Um bit de paragem. * //USART_STOPBITS_TWO// - Dois bits de paragem. * **//usart_parity//** \\ Enumeração do tipo de modo de paridade. Opções: * //USART_PARITY_NONE// - Desabilitado. * //USART_PARITY_EVEN// - Paridade par. * //USART_PARITY_ODD// - Paridade ímpar. ===== Funções ===== * **//USART_BAUDRATE_ASYNC(baud)//** \\ Função macro para calcular o valor da baud rate do registo USART em modo assíncrono. Parâmetros: * //baud// - Baud rate requerida. * Devolve o valor do registo da baud rate. * **//void usart_init_async(usart port, usart_databits data_bits, usart_stopbits stop_bits, usart_parity parity, usart_baudrate baudrate)//** \\ Inicializa o USART em modo assíncrono. Parâmetros: * //port// - variável do interface USART. * //data_bits// - Bits de dados. * //stop_bits// - Bits de paragem. * //parity// - Modo de paridade. * //baudrate// - Valor do registo de baud rate (pode ser calculado com a função macro //USART_BAUDRATE_ASYNC//). * **//void usart_send_char(usart port, char symbol)//** \\ Caractere de bloqueio de transmissão. As funções esperam até o buffer de transmissão ficar vazio antes de escreverem o caractere para o buffer. Parâmetros: * //port// - Variável de interface USART. * //symbol// - Caractere a enviar. * **//void usart_send_string(usart port, char *text)//** \\ String de bloqueio de transmissão. Parâmetros: * //port// - Variável de interface USART. * //text// - Apontador para string (array de char). A string tem de acabar com caractere null. * **//bool usart_has_data(usart port)//** \\ Verifica os dados no buffer que recebe. Parâmetros: * //port// - Variável de interface USART. * Devolve //true// quando existe um caractere no buffer recebido, e //false// caso contrário. * **//char usart_read_char(usart port)//** \\ Lê um caractere do buffer recebido. Antes de ler o utilizador tem de verificar se existe mesmo um caractere. Parâmetros: * //port// - Variável de interface USART. * Devolve um caractere. * **//bool usart_try_read_char(usart port, char *symbol)//** \\ Lê um caractere do buffer recebido se este existe. Parâmetros: * //port// - Variável de interface USART. * //symbol// - Apontador para uma variável do tipo caractere. Se existe um caractere no buffer recebido, este é escrito para a variável apontada. * Devolve //true// quando existe um caractere no buffer recebido, e //false// caso contrário. ===== Exemplo ===== O interface USART é configurado para usar 8 bits, um bit de paragem, um baud rate de 9600 bps e sem modo de paridade. O programa envia uma string, espera até algum caractere ser recebido e lê-o de seguida. #include // Use USART interface 0. usart port = USART(0); int main(void) { char c; // Interface initialization. usart_init_async(port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600)); // String sending. usart_send_string(port, "Hello\n"); // Waiting for incoming data. while (!usart_has_data(port)) {} // Read out the received character. c = usart_read_char(port); }