| #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; |
| } |