From fe9b30e2ebe68d1bcbce0c19a695709290f13472 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Thu, 12 Dec 2013 14:25:57 +0100 Subject: [PATCH] added GPIO output functions --- .../src/generatePinConstants/generate.sh | 86 ++++++++ .../test001/src/generatePinConstants/pins.tmp | 26 +++ china_devel_board/test001/src/main.c | 41 ++-- china_devel_board/test001/src/periph_conf.c | 185 ++++++++++++------ china_devel_board/test001/src/periph_conf.h | 51 ++++- china_devel_board/test001/src/stm32_eval.h | 10 +- 6 files changed, 316 insertions(+), 83 deletions(-) create mode 100755 china_devel_board/test001/src/generatePinConstants/generate.sh create mode 100644 china_devel_board/test001/src/generatePinConstants/pins.tmp diff --git a/china_devel_board/test001/src/generatePinConstants/generate.sh b/china_devel_board/test001/src/generatePinConstants/generate.sh new file mode 100755 index 0000000..e9f6eaa --- /dev/null +++ b/china_devel_board/test001/src/generatePinConstants/generate.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +#### number of pins! +no_pins=26 + +echo "found the following uC GPIO lines:" +echo +cat ../periph_conf.h | grep _PIN | perl -pi -e 's/#define //' \ +| perl -pi -e 's/_PIN.*//' | head -n $no_pins | tee pins.tmp +echo +echo ">pins.tmp" +echo + + +##### print the enum +echo "typedef enum" +echo "{" +c=0 +for entry in $(cat pins.tmp); do + if [ $c == $[ $no_pins - 1] ]; then + colon="" + else + colon="," + fi + echo " $entry = $c$colon" + c=$[ c + 1 ] +done +echo "} CB_GPIO_Pin_TypeDef;" +##### + +echo +echo + +##### print the PORTs +echo "GPIO_TypeDef* CB_GPIO_PORT[$no_pins] =" +echo "{" +c=0 +for entry in $(cat pins.tmp); do + if [ $c == $[ $no_pins - 1] ]; then + colon="" + else + colon="," + fi + echo " "$entry"_GPIO_PORT"$colon + c=$[ c + 1 ] +done +echo "};" +##### + +echo +echo + +##### print the PINs +echo "const uint16_t CB_GPIO_PIN[$no_pins] =" +echo "{" +c=0 +for entry in $(cat pins.tmp); do + if [ $c == $[ $no_pins - 1] ]; then + colon="" + else + colon="," + fi + echo " "$entry"_PIN"$colon + c=$[ c + 1 ] +done +echo "};" +##### + +echo +echo + +##### print the PINs +echo "const uint32_t CB_GPIO_CLK[$no_pins] =" +echo "{" +c=0 +for entry in $(cat pins.tmp); do + if [ $c == $[ $no_pins - 1] ]; then + colon="" + else + colon="," + fi + echo " "$entry"_GPIO_CLK"$colon + c=$[ c + 1 ] +done +echo "};" +##### \ No newline at end of file diff --git a/china_devel_board/test001/src/generatePinConstants/pins.tmp b/china_devel_board/test001/src/generatePinConstants/pins.tmp new file mode 100644 index 0000000..4fbce1f --- /dev/null +++ b/china_devel_board/test001/src/generatePinConstants/pins.tmp @@ -0,0 +1,26 @@ +LED1 +LED2 +LED3 +LED4 +JTAGEN0 +JTAGEN1 +SENSOREN0 +SENSOREN1 +DISD0 +DISA0 +DISD1 +DISA1 +ENAD0 +ENAA0 +ENAD1 +ENAA1 +OVCD_C0 +OVCA_C0 +OVCD_C1 +OVCA_C1 +MUXADDR0 +MUXADDR1 +ZEROCALIB +ADC_CONV0 +ADC_CONV1 +DAC_CS diff --git a/china_devel_board/test001/src/main.c b/china_devel_board/test001/src/main.c index ec6c558..8b3ab1c 100644 --- a/china_devel_board/test001/src/main.c +++ b/china_devel_board/test001/src/main.c @@ -45,10 +45,10 @@ int main(int argc, char *argv[]) { // configure timer interval -// SysTick_Config(16777215); // standard + SysTick_Config(16777215); // standard // SysTick_Config(7200000); // 10 Hz interrupt // SysTick_Config(720000); // 100 hz - SysTick_Config(72000); // 1000 hz +// SysTick_Config(72000); // 1000 hz // UART init the StdPeriphLib way @@ -62,22 +62,30 @@ int main(int argc, char *argv[]) { USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - STM_EVAL_COMInit(COM1, &USART_InitStructure); +// STM_EVAL_COMInit(COM1, &USART_InitStructure); // STM_EVAL_COMInit(COM2, &USART_InitStructure); // try the LED gpio stuff from the evaluation boards - STM_EVAL_LEDInit(LED1); - STM_EVAL_LEDInit(LED2); - STM_EVAL_LEDInit(LED3); - STM_EVAL_LEDInit(LED4); - STM_EVAL_LEDOn(LED1); - STM_EVAL_LEDOn(LED2); - STM_EVAL_LEDOn(LED3); - STM_EVAL_LEDOn(LED4); - +// STM_EVAL_LEDInit(LED1); +// STM_EVAL_LEDInit(LED2); +// STM_EVAL_LEDInit(LED3); +// STM_EVAL_LEDInit(LED4); +// STM_EVAL_LEDOn(LED1); +// STM_EVAL_LEDOn(LED2); +// STM_EVAL_LEDOn(LED3); +// STM_EVAL_LEDOn(LED4); + CB_GPIO_Out_Init(LED1); + CB_GPIO_Out_Init(LED2); + CB_GPIO_Out_Init(LED3); + CB_GPIO_Out_Init(LED4); + + CB_GPIO_Out_Hi(LED1); + CB_GPIO_Out_Hi(LED2); + CB_GPIO_Out_Lo(LED3); + CB_GPIO_Out_Hi(LED4); USART_SendData(EVAL_COM1, (uint8_t) 'A'); @@ -85,7 +93,7 @@ int main(int argc, char *argv[]) { USART_SendData(EVAL_COM1, (uint8_t) 'C'); // USART_SendData(EVAL_COM2, (uint8_t) 'B'); - init_SPI2(); +// init_SPI2(); SPIBuffer[0] = 0x1234; SPIBuffer[1] = 0x5678; @@ -221,6 +229,13 @@ void SysTick_Handler(void) // STM_EVAL_LEDToggle(LED4); // +// CB_GPIO_Out_Toggle(LED1); +// CB_GPIO_Out_Toggle(LED2); +// CB_GPIO_Out_Toggle(LED3); +// CB_GPIO_Out_Toggle(LED4); + + return; + uint8_t i; for( i = 0; i<10; i++){ USART_SendData(EVAL_COM1, character); diff --git a/china_devel_board/test001/src/periph_conf.c b/china_devel_board/test001/src/periph_conf.c index acbed60..a52c34d 100644 --- a/china_devel_board/test001/src/periph_conf.c +++ b/china_devel_board/test001/src/periph_conf.c @@ -31,53 +31,102 @@ #include "stm32f10x_i2c.h" #include "stm32f10x_dma.h" -/** @addtogroup Utilities - * @{ - */ - -/** @addtogroup STM32_EVAL - * @{ - */ - -/** @addtogroup STM32100E_EVAL - * @{ - */ - -/** @defgroup STM32100E_EVAL_LOW_LEVEL - * @brief This file provides firmware functions to manage Leds, push-buttons, - * COM ports, SD card on SDIO, serial flash (sFLASH), serial EEPROM (sEE) - * and temperature sensor (LM75) available on STM32100E-EVAL evaluation - * board from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Defines - * @{ - */ -/** - * @} - */ +// by micha, +GPIO_TypeDef* CB_GPIO_PORT[26] = +{ + LED1_GPIO_PORT, + LED2_GPIO_PORT, + LED3_GPIO_PORT, + LED4_GPIO_PORT, + JTAGEN0_GPIO_PORT, + JTAGEN1_GPIO_PORT, + SENSOREN0_GPIO_PORT, + SENSOREN1_GPIO_PORT, + DISD0_GPIO_PORT, + DISA0_GPIO_PORT, + DISD1_GPIO_PORT, + DISA1_GPIO_PORT, + ENAD0_GPIO_PORT, + ENAA0_GPIO_PORT, + ENAD1_GPIO_PORT, + ENAA1_GPIO_PORT, + OVCD_C0_GPIO_PORT, + OVCA_C0_GPIO_PORT, + OVCD_C1_GPIO_PORT, + OVCA_C1_GPIO_PORT, + MUXADDR0_GPIO_PORT, + MUXADDR1_GPIO_PORT, + ZEROCALIB_GPIO_PORT, + ADC_CONV0_GPIO_PORT, + ADC_CONV1_GPIO_PORT, + DAC_CS_GPIO_PORT +}; + + +const uint16_t CB_GPIO_PIN[26] = +{ + LED1_PIN, + LED2_PIN, + LED3_PIN, + LED4_PIN, + JTAGEN0_PIN, + JTAGEN1_PIN, + SENSOREN0_PIN, + SENSOREN1_PIN, + DISD0_PIN, + DISA0_PIN, + DISD1_PIN, + DISA1_PIN, + ENAD0_PIN, + ENAA0_PIN, + ENAD1_PIN, + ENAA1_PIN, + OVCD_C0_PIN, + OVCA_C0_PIN, + OVCD_C1_PIN, + OVCA_C1_PIN, + MUXADDR0_PIN, + MUXADDR1_PIN, + ZEROCALIB_PIN, + ADC_CONV0_PIN, + ADC_CONV1_PIN, + DAC_CS_PIN +}; + + +const uint32_t CB_GPIO_CLK[26] = +{ + LED1_GPIO_CLK, + LED2_GPIO_CLK, + LED3_GPIO_CLK, + LED4_GPIO_CLK, + JTAGEN0_GPIO_CLK, + JTAGEN1_GPIO_CLK, + SENSOREN0_GPIO_CLK, + SENSOREN1_GPIO_CLK, + DISD0_GPIO_CLK, + DISA0_GPIO_CLK, + DISD1_GPIO_CLK, + DISA1_GPIO_CLK, + ENAD0_GPIO_CLK, + ENAA0_GPIO_CLK, + ENAD1_GPIO_CLK, + ENAA1_GPIO_CLK, + OVCD_C0_GPIO_CLK, + OVCA_C0_GPIO_CLK, + OVCD_C1_GPIO_CLK, + OVCA_C1_GPIO_CLK, + MUXADDR0_GPIO_CLK, + MUXADDR1_GPIO_CLK, + ZEROCALIB_GPIO_CLK, + ADC_CONV0_GPIO_CLK, + ADC_CONV1_GPIO_CLK, + DAC_CS_GPIO_CLK +}; -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Macros - * @{ - */ -/** - * @} - */ -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Variables - * @{ - */ GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT, LED4_GPIO_PORT}; const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN, @@ -150,34 +199,26 @@ const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN}; DMA_InitTypeDef sEEDMA_InitStructure; -/** - * @} - */ -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ +void CB_GPIO_Out_Init(CB_GPIO_Pin_TypeDef Pin) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable the GPIO_LED Clock */ + RCC_APB2PeriphClockCmd(CB_GPIO_CLK[Pin], ENABLE); + + /* Configure the GPIO_LED pin */ + GPIO_InitStructure.GPIO_Pin = CB_GPIO_PIN[Pin]; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + + GPIO_Init(CB_GPIO_PORT[Pin], &GPIO_InitStructure); +} -/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Functions - * @{ - */ -/** - * @brief Configures LED GPIO. - * @param Led: Specifies the Led to be configured. - * This parameter can be one of following parameters: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - * @retval None - */ void STM_EVAL_LEDInit(Led_TypeDef Led) { GPIO_InitTypeDef GPIO_InitStructure; @@ -208,6 +249,11 @@ void STM_EVAL_LEDOn(Led_TypeDef Led) GPIO_PORT[Led]->BSRR = GPIO_PIN[Led]; } +void CB_GPIO_Out_Hi(CB_GPIO_Pin_TypeDef Pin) +{ + CB_GPIO_PORT[Pin]->BSRR = CB_GPIO_PIN[Pin]; +} + /** * @brief Turns selected LED Off. * @param Led: Specifies the Led to be set off. @@ -223,6 +269,11 @@ void STM_EVAL_LEDOff(Led_TypeDef Led) GPIO_PORT[Led]->BRR = GPIO_PIN[Led]; } +void CB_GPIO_Out_Lo(CB_GPIO_Pin_TypeDef Pin) +{ + CB_GPIO_PORT[Pin]->BRR = CB_GPIO_PIN[Pin]; +} + /** * @brief Toggles the selected LED. * @param Led: Specifies the Led to be toggled. @@ -238,6 +289,10 @@ void STM_EVAL_LEDToggle(Led_TypeDef Led) GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led]; } +void CB_GPIO_Out_Toggle(CB_GPIO_Pin_TypeDef Pin) +{ + CB_GPIO_PORT[Pin]->ODR ^= CB_GPIO_PIN[Pin]; +} /** * @brief Configures Button GPIO and EXTI Line. * @param Button: Specifies the Button to be configured. diff --git a/china_devel_board/test001/src/periph_conf.h b/china_devel_board/test001/src/periph_conf.h index b07209a..196d574 100644 --- a/china_devel_board/test001/src/periph_conf.h +++ b/china_devel_board/test001/src/periph_conf.h @@ -78,10 +78,11 @@ #define LED2_GPIO_PORT GPIOC #define LED2_GPIO_CLK RCC_APB2Periph_GPIOC +// not working #define LED3_PIN GPIO_Pin_7 #define LED3_GPIO_PORT GPIOC #define LED3_GPIO_CLK RCC_APB2Periph_GPIOC - +// not working #define LED4_PIN GPIO_Pin_6 #define LED4_GPIO_PORT GPIOC #define LED4_GPIO_CLK RCC_APB2Periph_GPIOC @@ -181,6 +182,48 @@ #define DAC_CS_GPIO_PORT GPIOC #define DAC_CS_GPIO_CLK RCC_APB2Periph_GPIOC + + +// give me just the line names: (bash) +// cat periph_conf.h | grep _PIN | perl -pi -e 's/#define //' | perl -pi -e 's/_PIN.*//' + + +typedef enum +{ + LED1 = 0, + LED2 = 1, + LED3 = 2, + LED4 = 3, + JTAGEN0 = 4, + JTAGEN1 = 5, + SENSOREN0 = 6, + SENSOREN1 = 7, + DISD0 = 8, + DISA0 = 9, + DISD1 = 10, + DISA1 = 11, + ENAD0 = 12, + ENAA0 = 13, + ENAD1 = 14, + ENAA1 = 15, + OVCD_C0 = 16, + OVCA_C0 = 17, + OVCD_C1 = 18, + OVCA_C1 = 19, + MUXADDR0 = 20, + MUXADDR1 = 21, + ZEROCALIB = 22, + ADC_CONV0 = 23, + ADC_CONV1 = 24, + DAC_CS = 25 +} CB_GPIO_Pin_TypeDef; + + + + + + + /** * @} */ @@ -456,6 +499,12 @@ void STM_EVAL_LEDInit(Led_TypeDef Led); void STM_EVAL_LEDOn(Led_TypeDef Led); void STM_EVAL_LEDOff(Led_TypeDef Led); void STM_EVAL_LEDToggle(Led_TypeDef Led); + +void CB_GPIO_Out_Init(CB_GPIO_Pin_TypeDef Pin); +void CB_GPIO_Out_Hi(CB_GPIO_Pin_TypeDef Pin); +void CB_GPIO_Out_Lo(CB_GPIO_Pin_TypeDef Pin); +void CB_GPIO_Out_Toggle(CB_GPIO_Pin_TypeDef Pin); + void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); uint32_t STM_EVAL_PBGetState(Button_TypeDef Button); void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct); diff --git a/china_devel_board/test001/src/stm32_eval.h b/china_devel_board/test001/src/stm32_eval.h index e00f025..b964a9d 100644 --- a/china_devel_board/test001/src/stm32_eval.h +++ b/china_devel_board/test001/src/stm32_eval.h @@ -80,12 +80,14 @@ /** @defgroup STM32_EVAL_Exported_Types * @{ */ + +// garbage: typedef enum { - LED1 = 0, - LED2 = 1, - LED3 = 2, - LED4 = 3 + xLED1 = 0, + xLED2 = 1, + xLED3 = 2, + xLED4 = 3 } Led_TypeDef; typedef enum -- 2.43.0