#include "board.h" #include "spi.h" #include "pio.h" #include "pmc.h" #include "usart.h" #define BUFFER_SIZE 20 const Pin statusled = {LED_GREEN, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}; /* * Describes the type and attribute of one PIO pin or a group of similar pins. * The #type# field can have the following values: * - PIO_PERIPH_A * - PIO_PERIPH_B * - PIO_OUTPUT_0 * - PIO_OUTPUT_1 * - PIO_INPUT * * The #attribute# field is a bitmask that can either be set to PIO_DEFAULt, * or combine (using bitwise OR '|') any number of the following constants: * - PIO_PULLUP * - PIO_DEGLITCH * - PIO_DEBOUNCE * - PIO_OPENDRAIN * - PIO_IT_LOW_LEVEL * - PIO_IT_HIGH_LEVEL * - PIO_IT_FALL_EDGE * - PIO_IT_RISE_EDGE */ #if 0 typedef struct _Pin { /* Bitmask indicating which pin(s) to configure. */ uint32_t mask; /* Pointer to the PIO controller which has the pin(s). */ Pio *pio; /* Peripheral ID of the PIO controller which has the pin(s). */ uint8_t id; /* Pin type. */ uint8_t type; /* Pin attribute. */ uint8_t attribute; } Pin ; */ #endif /** Pins to configure for the application.*/ const Pin pins[] = { BOARD_PIN_USART_RXD, BOARD_PIN_USART_TXD // PIN_USART1_SCK, // BOARD_PIN_USART_RTS, // BOARD_PIN_USART_CTS, // PINS_SPI, // PIN_SPI_NPCS0_PA11 }; char Buffer[BUFFER_SIZE] = "Hello World"; /** * \brief Configures USART in synchronous mode,8N1 * * \param mode 1 for master, 0 for slave * */ static void _ConfigureUsart(uint32_t freq ) { uint32_t mode; /* MASTER; mode = US_MR_USART_MODE_NORMAL | US_MR_USCLKS_MCK | US_MR_CHMODE_NORMAL | US_MR_CLKO | US_MR_SYNC // FIXME: sync or not sync? | US_MR_MSBF | US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | US_MR_PAR_NO ; */ // Slave mode: mode = US_MR_USART_MODE_NORMAL | US_MR_USCLKS_SCK // we don't have serial clock, do we? | US_MR_CHMODE_NORMAL // | US_MR_SYNC | US_MR_MSBF | US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | US_MR_PAR_NO; /* Enable the peripheral clock in the PMC */ PMC_EnablePeripheral( BOARD_ID_USART ) ; /* Configure the USART in the desired mode @USART_SPI_CLK bauds*/ USART_Configure( BOARD_USART_BASE, mode, freq, BOARD_MCK ) ; UART_Configure(9600, BOARD_MCK); /* enable USART1 interrupt */ // NVIC_EnableIRQ( USART1_IRQn ) ; /* Enable receiver & transmitter */ USART_SetTransmitterEnabled( BOARD_USART_BASE, 1 ) ; USART_SetReceiverEnabled( BOARD_USART_BASE, 1 ) ; } int main() { register int i = 0; register int state = 0; /* Configure pins */ // FIXME: initialize system clock done in lowlevelinit? PIO_Configure(&statusled, PIO_LISTSIZE(statusled)); PIO_Clear(&statusled); PIO_Configure( pins, PIO_LISTSIZE( pins ) ) ; _ConfigureUsart( 1000000UL); while(1) { USART_WriteBuffer(BOARD_USART_BASE, Buffer, BUFFER_SIZE); i = i+1; if ((i%500000) == 0) { switch(state) { case 0: PIO_Set(&statusled); state=1; break; case 1: PIO_Clear(&statusled); state = 2; break; default: state = 0; } } } // FIXME: do we need to call USARTEnable? // FIXME: do we need to call USARTDisable? return 0; }