From 6219b5c63db9ae7e9c5d36679924d78679dc371b Mon Sep 17 00:00:00 2001 From: Christina Quast Date: Tue, 2 Dec 2014 13:09:49 +0100 Subject: [PATCH] some main file possibilities --- sam3s_example/mains/blink_thilo.c | 45 ++++++++++ sam3s_example/mains/spi.c | 77 ++++++++++++++++ sam3s_example/mains/usart.c | 144 ++++++++++++++++++++++++++++++ 3 files changed, 266 insertions(+) create mode 100644 sam3s_example/mains/blink_thilo.c create mode 100644 sam3s_example/mains/spi.c create mode 100644 sam3s_example/mains/usart.c diff --git a/sam3s_example/mains/blink_thilo.c b/sam3s_example/mains/blink_thilo.c new file mode 100644 index 00000000..0228922e --- /dev/null +++ b/sam3s_example/mains/blink_thilo.c @@ -0,0 +1,45 @@ +#include "board.h" +#include "pio.h" + +const Pin statusled = {PIO_PA18, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}; +const Pin statusled2 = {PIO_PA17, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}; + +int main() +{ + register int i = 0; + register int b = 0; + + PIO_Configure(&statusled, PIO_LISTSIZE(statusled)); + PIO_Clear(&statusled); + PIO_Configure(&statusled2, PIO_LISTSIZE(statusled2)); + PIO_Clear(&statusled2); + + for(;;) { + i = i+1; + if ((i%100000) == 0) { + switch(b) { + case 0: + PIO_Set(&statusled); + b=1; + break; + case 1: + PIO_Set(&statusled2); + PIO_Set(&statusled); + b = 2; + break; + case 2: + PIO_Clear(&statusled); + b = 3; + break; + case 3: + PIO_Clear(&statusled2); + b = 0; + break; + default: + b = 0; + } + } + } + + return i; +} diff --git a/sam3s_example/mains/spi.c b/sam3s_example/mains/spi.c new file mode 100644 index 00000000..4abaf6bd --- /dev/null +++ b/sam3s_example/mains/spi.c @@ -0,0 +1,77 @@ +#include "board.h" +#include "spi.h" +#include "pio.h" +#include "pmc.h" +#include "usart.h" + +#define BUFFER_SIZE 20 + +/** 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 ) ; + + /* enable USART1 interrupt */ +// NVIC_EnableIRQ( USART1_IRQn ) ; + + /* Enable receiver & transmitter */ + USART_SetTransmitterEnabled( BOARD_USART_BASE, 1 ) ; + USART_SetReceiverEnabled( BOARD_USART_BASE, 1 ) ; +} + +int main() { + /* Configure pins */ + PIO_Configure( pins, PIO_LISTSIZE( pins ) ) ; + + _ConfigureUsart( 1000000UL); + + USART_WriteBuffer(BOARD_USART_BASE, Buffer, BUFFER_SIZE); + +// FIXME: do we need to call USARTEnable? + + +// FIXME: do we need to call USARTDisable? + + return 0; +} diff --git a/sam3s_example/mains/usart.c b/sam3s_example/mains/usart.c new file mode 100644 index 00000000..6b7c2ab7 --- /dev/null +++ b/sam3s_example/mains/usart.c @@ -0,0 +1,144 @@ +#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; +}