diff --git a/bsp/src/common/bsp_gpio.h b/bsp/src/common/bsp_gpio.h --- a/bsp/src/common/bsp_gpio.h +++ b/bsp/src/common/bsp_gpio.h @@ -22,25 +22,40 @@ #include +#define bsp_gpio_init_list(list) __bsp_gpio_init_list(list,sizeof(list)/sizeof(gpioinitlist_str)) + +typedef struct +{ + gpio_t gpio; + gpioconfig_str config; +}gpioinitlist_str; + + + +void __bsp_gpio_init_list(gpioinitlist_str* list, int len) +{ + for(int i=0;i>(uint32_t)8) gpio_t gpio1 = gpioopen(LCD_RESET); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); gpioclr(LCD_RESET); gpio_t LCD_DBxList[]={PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15\ @@ -145,8 +145,7 @@ int bsp_FSMC_init() for(int i=0;i<20;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } diff --git a/bsp/src/stm32f4/M4Stick/bsp.c b/bsp/src/stm32f4/M4Stick/bsp.c --- a/bsp/src/stm32f4/M4Stick/bsp.c +++ b/bsp/src/stm32f4/M4Stick/bsp.c @@ -55,10 +55,10 @@ void bsp_GPIO_init() { gpio_t gpio1 = gpioopen(PC6);//gpioopen(LED1); //PD9 D=> 0x0300 9 => 0x0009 gpio_t gpio2 = gpioopen(PC7);//gpioopen(LED2); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); } void bsp_uart_init() diff --git a/bsp/src/stm32f4/M4StickV2/bsp.c b/bsp/src/stm32f4/M4StickV2/bsp.c --- a/bsp/src/stm32f4/M4StickV2/bsp.c +++ b/bsp/src/stm32f4/M4StickV2/bsp.c @@ -62,9 +62,9 @@ void bsp_GPIO_init() for(int i=0;i<8;i++) { GPIOx = gpioopen(GPIOList[i]); - gpiosetspeed(&GPIOx,gpiohighspeed); - gpiosetdir(&GPIOx,gpiooutdir); - gpiosetouttype(&GPIOx,gpiopushpulltype); + gpiosetspeed(GPIOx,gpiohighspeed); + gpiosetdir(GPIOx,gpiooutdir); + gpiosetouttype(GPIOx,gpiopushpulltype); } gpioset(ADC_CLKDIV); gpioset(ADC_MODE0); diff --git a/bsp/src/stm32f4/OPLAYER/bsp_lcd.c b/bsp/src/stm32f4/OPLAYER/bsp_lcd.c --- a/bsp/src/stm32f4/OPLAYER/bsp_lcd.c +++ b/bsp/src/stm32f4/OPLAYER/bsp_lcd.c @@ -60,8 +60,7 @@ int bsp_FSMC_init() for(int i=0;i<10;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } diff --git a/bsp/src/stm32f4/OPLAYER/bsp_spi.c b/bsp/src/stm32f4/OPLAYER/bsp_spi.c --- a/bsp/src/stm32f4/OPLAYER/bsp_spi.c +++ b/bsp/src/stm32f4/OPLAYER/bsp_spi.c @@ -41,8 +41,7 @@ void bsp_spi_init() for(int i=0;i<3;i++) { gpio_t SPI_DBx = gpioopen(VSSPI_DBxList[i]); - SPI_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SPI_DBx); + gpiosetconfig(SPI_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SPI_DBx), (uint8_t)(SPI_DBx & 0xF), GPIO_AF_SPI1); } spiopenandconfig(VS1053SPI,spi8bits|spimaster|spimsbfirst,2*1000*1000,VS1053MOSI,VS1053MISO,VS1053SCK,-1); @@ -51,8 +50,7 @@ void bsp_spi_init() for(int i=0;i<3;i++) { gpio_t SPI_DBx = gpioopen(SDSPI_DBxList[i]); - SPI_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SPI_DBx); + gpiosetconfig(SPI_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SPI_DBx), (uint8_t)(SPI_DBx & 0xF), GPIO_AF_SPI3); } spiopenandconfig(SDCARD2SPI,spi8bits|spimaster|spimsbfirst,400*1000,SDCARD2MOSI,SDCARD2MISO,SDCARD2SCK,-1); @@ -61,8 +59,7 @@ void bsp_spi_init() for(int i=0;i<3;i++) { gpio_t SPI_DBx = gpioopen(TCSPI_DBxList[i]); - SPI_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SPI_DBx); + gpiosetconfig(SPI_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SPI_DBx), (uint8_t)(SPI_DBx & 0xF), GPIO_AF_SPI2); } spiopenandconfig(TC_SPI,spi8bits|spimaster|spimsbfirst,500*1000,TC_DIN,TC_DOUT,TC_CLK,-1); diff --git a/bsp/src/stm32f4/SOLAR_LFR_PSU/bsp.c b/bsp/src/stm32f4/SOLAR_LFR_PSU/bsp.c --- a/bsp/src/stm32f4/SOLAR_LFR_PSU/bsp.c +++ b/bsp/src/stm32f4/SOLAR_LFR_PSU/bsp.c @@ -61,16 +61,16 @@ void bsp_GPIO_init() gpio_t gpio3 = gpioopen(PD14);//gpioopen(LED2); gpio_t gpio4 = gpioopen(PD15);//gpioopen(LED2); gpio_t dacRst=gpioopen(PD4); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetspeed(&gpio4,gpiohighspeed); - gpiosetspeed(&dacRst,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio4,gpiooutdir); - gpiosetdir(&dacRst,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetspeed(gpio3,gpiohighspeed); + gpiosetspeed(gpio4,gpiohighspeed); + gpiosetspeed(dacRst,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio3,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); + gpiosetdir(gpio4,gpiooutdir); + gpiosetdir(dacRst,gpiooutdir); gpioset(dacRst); } diff --git a/bsp/src/stm32f4/SOSmartPSU/bsp.c b/bsp/src/stm32f4/SOSmartPSU/bsp.c --- a/bsp/src/stm32f4/SOSmartPSU/bsp.c +++ b/bsp/src/stm32f4/SOSmartPSU/bsp.c @@ -32,6 +32,8 @@ #include #include #include +#include +#include "../../common/bsp_gpio.h" uint32_t OSC0 =12000000; uint32_t INTOSC =16000000; @@ -106,6 +108,22 @@ LCD_t* FRAME_BUFFER=&FRAME_BUFFER0; float VREF0 =(float)3.3; +// GPIO config list +gpioinitlist_str gpios[]={ + {LED1,{gpiooutdir,gpiohighspeed,0,0}}, + {LED2,{gpiooutdir,gpiohighspeed,0,0}}, + {LED3,{gpiooutdir,gpiohighspeed,0,0}}, + {PSU_DISABLE,{gpiooutdir,gpiohighspeed,gpiopushpulltype,0}}, + {PSU_ALERT_5V,{gpioindir,gpiohighspeed,0,0}}, + {PSU_ALERT_1_5V,{gpioindir,gpiohighspeed,0,0}}, + {PSU_ALERT_3_3V,{gpioindir,gpiohighspeed,0,0}}, + {BP1,{gpioindir,gpiohighspeed,0,0}}, + {BP2,{gpioindir,gpiohighspeed,0,0}}, + {BP3,{gpioindir,gpiohighspeed,0,0}}, + {BP4,{gpioindir,gpiohighspeed,0,0}}, + {TC_IRQ,{gpioindir,gpiohighspeed,0,gpiopulluptype}} +}; + int bsp_init() { int i=0; @@ -125,50 +143,20 @@ int bsp_init() printf(BSP); printf(" initialised\n\r"); printf( "=====================\n\r"); + char uuid[12]; + getCpuUUID(uuid); + printf("CPU UUID ="); + for(int i=0;i<12;i++) + { + printf( "%02x",uuid[i]); + } + printf( "\n\r=====================\n\r"); return 1; } void bsp_GPIO_init() { - gpio_t gpio1 = gpioopen(LED1); - gpio_t gpio2 = gpioopen(LED2); - gpio_t gpio3 = gpioopen(LED3); - gpio_t gpio4 = gpioopen(PSU_DISABLE); - gpio_t gpio5 = gpioopen(PSU_ALERT_5V); - gpio_t gpio6 = gpioopen(PSU_ALERT_1_5V); - gpio_t gpio7 = gpioopen(PSU_ALERT_3_3V); - gpio_t gpio8 = gpioopen(BP1); - gpio_t gpio9 = gpioopen(BP2); - gpio_t gpio10 = gpioopen(BP3); - gpio_t gpio11 = gpioopen(BP4); - gpio_t gpio12 = gpioopen(TC_IRQ); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetspeed(&gpio4,gpiohighspeed); - gpiosetspeed(&gpio5,gpiohighspeed); - gpiosetspeed(&gpio6,gpiohighspeed); - gpiosetspeed(&gpio7,gpiohighspeed); - gpiosetspeed(&gpio8,gpiohighspeed); - gpiosetspeed(&gpio9,gpiohighspeed); - gpiosetspeed(&gpio10,gpiohighspeed); - gpiosetspeed(&gpio11,gpiohighspeed); - gpiosetspeed(&gpio12,gpiohighspeed); - gpioclr(PSU_DISABLE); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio4,gpiooutdir); - gpiosetdir(&gpio5,gpioindir); - gpiosetdir(&gpio6,gpioindir); - gpiosetdir(&gpio7,gpioindir); - gpiosetdir(&gpio8,gpioindir); - gpiosetdir(&gpio9,gpioindir); - gpiosetdir(&gpio10,gpioindir); - gpiosetdir(&gpio11,gpioindir); - gpiosetdir(&gpio12,gpioindir); - gpiosetpulltype(&gpio4,gpiopushpulltype); - gpiosetpulltype(&gpio12,gpiopulluptype); + bsp_gpio_init_list(gpios); gpioclr(PSU_DISABLE); pwmopen(PWM9_CH2,LCD_BACKLIGHT); int error = pwmsetconfig(PWM9_CH2,100,80.0); @@ -197,8 +185,8 @@ int bsp_FSMC_init() #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8) gpio_t gpio1 = gpioopen(LCD_RESET); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); gpioclr(LCD_RESET); gpio_t LCD_DBxList[]={ @@ -226,8 +214,7 @@ int bsp_FSMC_init() for(int i=0;i<20;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } @@ -316,8 +303,7 @@ int bsp_FSMC_init() for(int i=0;i<23;i++) { gpio_t SRAM_DBx = gpioopen(SRAM_DBxList[i]); - SRAM_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SRAM_DBx); + gpiosetconfig(SRAM_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SRAM_DBx), (uint8_t)(SRAM_DBx & 0xF), GPIO_AF_FSMC); } /*-- FSMC Configuration ------------------------------------------------------*/ @@ -364,13 +350,12 @@ void bsp_spi_init() { // ads7843init(&tc_dev,spi1,ADS7843_POWER_ADC_ON|ADS7843_MODE_12BITS,&TC_setnCS,&TC_busy); - spiopenandconfig(spi1,spimaster|spi8bits|spimsbfirst|spiclkfirstedge,10000000,TC_DIN,TC_DOUT,TC_CLK,-1); } void bsp_iic_init() { - i2copenandconfig(i2c3,0,10000,PH8,PH7); + i2copenandconfig(i2c3,0,100000,PH8,PH7); } void bsp_SD_init() @@ -470,31 +455,15 @@ void bsp_TC_init() #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8) gpio_t gpio1 = gpioopen(TC_BUSY); - gpio1 |= gpiohighspeed | gpioindir | gpionopulltype; - gpiosetconfig(&gpio1); + gpiosetconfig(gpio1,gpioindir,gpiohighspeed, 0, 0); gpio1 = gpioopen(TC_IRQ); - gpio1 |= gpiohighspeed | gpioindir | gpiopulluptype; - gpiosetconfig(&gpio1); + gpiosetconfig(gpio1,gpioindir,gpiohighspeed, 0, 0); gpio1 = gpioopen(TC_CS); - gpio1 |= gpiohighspeed | gpiooutdir | gpionopulltype; - gpiosetconfig(&gpio1); - - gpio1 = gpioopen(TC_CLK); - gpio1 |= gpiohighspeed | gpioaf | gpionopulltype; - gpiosetconfig(&gpio1); - GPIO_PinAFConfig(GPIOGETPORT(TC_CLK), (uint8_t)(TC_CLK & 0xF), GPIO_AF_SPI1); + gpiosetconfig(gpio1, gpiooutdir, gpiohighspeed, 0, 0); - gpio1 = gpioopen(TC_DIN); - gpio1 |= gpiohighspeed | gpioaf | gpionopulltype; - gpiosetconfig(&gpio1); - GPIO_PinAFConfig(GPIOGETPORT(gpio1), (uint8_t)(gpio1 & 0xF), GPIO_AF_SPI1); - - gpio1 = gpioopen(TC_DOUT); - gpio1 |= gpiohighspeed | gpioaf | gpionopulltype; - gpiosetconfig(&gpio1); - GPIO_PinAFConfig(GPIOGETPORT(gpio1), (uint8_t)(gpio1 & 0xF), GPIO_AF_SPI1); + spiopenandconfig(spi1,spimaster|spi8bits|spimsbfirst|spiclkfirstedge,10000000,TC_DIN,TC_DOUT,TC_CLK,-1); } diff --git a/bsp/src/stm32f4/STM32F429Discovery/bsp.c b/bsp/src/stm32f4/STM32F429Discovery/bsp.c --- a/bsp/src/stm32f4/STM32F429Discovery/bsp.c +++ b/bsp/src/stm32f4/STM32F429Discovery/bsp.c @@ -25,6 +25,7 @@ #include #include #include +#include "../../common/bsp_gpio.h" uint32_t OSC0 =8000000; uint32_t INTOSC =16000000; uint32_t RTCOSC =32768; @@ -33,6 +34,10 @@ extern streamdevice* __opnfiles__[__MAX_ gpio_t TickLed = LED1; float VREF0 =(float)3.3; +gpioinitlist_str gpios[]={ + {LED1,{gpiooutdir,gpiohighspeed,0,0}}, + {LED2,{gpiooutdir,gpiohighspeed,0,0}}, + {BP0,{gpioindir,gpiohighspeed,0,0}}}; int bsp_init() { @@ -53,22 +58,13 @@ int bsp_init() void bsp_GPIO_init() { - gpio_t gpio1 = gpioopen(LED1); - gpio_t gpio2 = gpioopen(LED2); - gpio_t gpio3 = gpioopen(BP0); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio3,gpioindir); + bsp_gpio_init_list(gpios); } void bsp_uart_init() { if(__opnfiles__[1]==NULL) { - //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t)); streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1); uartmkstreamdev(uart,fd1); @@ -97,6 +93,17 @@ void bsp_SD_init() } +/* + * IM0=0 + * IM1=1 + * IM2=1 + * IM3=0 + * 4-wire 8-bit data serial interface I +*/ +void bsp_LCD_init() +{ + +} void vs10XXclearXCS(){} void vs10XXsetXCS(){} @@ -128,5 +135,16 @@ void bspsdcardselect(char YESNO) +void bsp_lcd0_write_reg(uint32_t reg,uint32_t data) +{ + +} + +uint32_t bsp_lcd0_read_reg(uint32_t reg) +{ + uint16_t value; + + return value; +} diff --git a/bsp/src/stm32f4/STM32F429Discovery/bsp.h b/bsp/src/stm32f4/STM32F429Discovery/bsp.h --- a/bsp/src/stm32f4/STM32F429Discovery/bsp.h +++ b/bsp/src/stm32f4/STM32F429Discovery/bsp.h @@ -32,6 +32,14 @@ #define BP0 PA0 +//LCD Signals +//#define LCD_RST PE2 +#define LCD_DCX PD13 +#define LCD_SCL PF7 +#define LCD_SDA PF9 +#define LCD_CSX PC2 + + extern float VREF0; extern uint32_t OSC0; @@ -46,6 +54,7 @@ extern void bsp_uart_init(); extern void bsp_iic_init(); extern void bsp_spi_init(); extern void bsp_SD_init(); +extern void bsp_LCD_init(); /* VS1053 */ extern void clearXCS(); @@ -58,6 +67,9 @@ char bspsdcardpresent(); void bspsdcardselect(char YESNO); char bspsdcardwriteprotected(); +void bsp_lcd0_write_reg(uint32_t reg,uint32_t data); +uint32_t bsp_lcd0_read_reg(uint32_t reg); + #endif diff --git a/bsp/src/stm32f4/STM32F4Discovery-EXT/bsp.c b/bsp/src/stm32f4/STM32F4Discovery-EXT/bsp.c --- a/bsp/src/stm32f4/STM32F4Discovery-EXT/bsp.c +++ b/bsp/src/stm32f4/STM32F4Discovery-EXT/bsp.c @@ -87,12 +87,12 @@ void bsp_GPIO_init() // gpio_t gpio2 = gpioopen(PD13);//gpioopen(LED2); gpio_t gpio3 = gpioopen(PD14);//gpioopen(LED2); // gpio_t gpio4 = gpioopen(PD15);//gpioopen(LED2); - gpiosetspeed(&gpio1,gpiohighspeed); + gpiosetspeed(gpio1,gpiohighspeed); //gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); + gpiosetspeed(gpio3,gpiohighspeed); //gpiosetspeed(&gpio4,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio3,gpiooutdir); // gpiosetdir(&gpio2,gpiooutdir); //gpiosetdir(&gpio4,gpiooutdir); } @@ -149,12 +149,12 @@ int bsp_FSMC_init() #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8) gpio_t gpio1 = gpioopen(LCD_RESET); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); gpioclr(LCD_RESET); gpio1 = gpioopen(LCD_CS); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); gpioset(LCD_CS); gpio_t LCD_DBxList[]={ PD0 ,PD1 ,PD4 ,PD5 ,PD8 ,PD9 ,PD10,PD14,PD15, @@ -164,8 +164,7 @@ int bsp_FSMC_init() for(int i=0;i<19;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } diff --git a/bsp/src/stm32f4/STM32F4Discovery-ILI9328-8bits/bsp.c b/bsp/src/stm32f4/STM32F4Discovery-ILI9328-8bits/bsp.c --- a/bsp/src/stm32f4/STM32F4Discovery-ILI9328-8bits/bsp.c +++ b/bsp/src/stm32f4/STM32F4Discovery-ILI9328-8bits/bsp.c @@ -102,14 +102,14 @@ void bsp_GPIO_init() gpio_t gpio2 = gpioopen(PD13);//gpioopen(LED2); gpio_t gpio3 = gpioopen(PD14);//gpioopen(LED2); gpio_t gpio4 = gpioopen(PD15);//gpioopen(LED2); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetspeed(&gpio4,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio4,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetspeed(gpio3,gpiohighspeed); + gpiosetspeed(gpio4,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio3,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); + gpiosetdir(gpio4,gpiooutdir); } void bsp_uart_init() @@ -145,8 +145,7 @@ int bsp_FSMC_init() for(int i=0;i<12;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } diff --git a/bsp/src/stm32f4/STM32F4Discovery/bsp.c b/bsp/src/stm32f4/STM32F4Discovery/bsp.c --- a/bsp/src/stm32f4/STM32F4Discovery/bsp.c +++ b/bsp/src/stm32f4/STM32F4Discovery/bsp.c @@ -57,14 +57,14 @@ void bsp_GPIO_init() gpio_t gpio2 = gpioopen(PD13);//gpioopen(LED2); gpio_t gpio3 = gpioopen(PD14);//gpioopen(LED2); gpio_t gpio4 = gpioopen(PD15);//gpioopen(LED2); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetspeed(&gpio4,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio4,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetspeed(gpio3,gpiohighspeed); + gpiosetspeed(gpio4,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio3,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); + gpiosetdir(gpio4,gpiooutdir); } void bsp_uart_init() diff --git a/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp.c b/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp.c --- a/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp.c +++ b/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp.c @@ -77,10 +77,10 @@ void bsp_GPIO_init() { gpio_t gpio1 = gpioopen(LED1);//gpioopen(LED1); //PD9 D=> 0x0300 9 => 0x0009 gpio_t gpio2 = gpioopen(LED2);//gpioopen(LED2); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); } void bsp_uart_init() diff --git a/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp_lcd.c b/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp_lcd.c --- a/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp_lcd.c +++ b/bsp/src/stm32f4/STM32F4Discovery_35LCD/bsp_lcd.c @@ -61,8 +61,7 @@ int bsp_FSMC_init() for(int i=0;i<10;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } diff --git a/bsp/src/stm32f4/STM32F4Eval/bsp.c b/bsp/src/stm32f4/STM32F4Eval/bsp.c --- a/bsp/src/stm32f4/STM32F4Eval/bsp.c +++ b/bsp/src/stm32f4/STM32F4Eval/bsp.c @@ -92,12 +92,12 @@ void bsp_GPIO_init() gpio_t gpio1 = gpioopen(LED1); gpio_t gpio2 = gpioopen(LED2); gpio_t gpio3 = gpioopen(LED3); - gpiosetspeed(&gpio1,gpiohighspeed); - gpiosetspeed(&gpio2,gpiohighspeed); - gpiosetspeed(&gpio3,gpiohighspeed); - gpiosetdir(&gpio1,gpiooutdir); - gpiosetdir(&gpio2,gpiooutdir); - gpiosetdir(&gpio3,gpiooutdir); + gpiosetspeed(gpio1,gpiohighspeed); + gpiosetspeed(gpio2,gpiohighspeed); + gpiosetspeed(gpio3,gpiohighspeed); + gpiosetdir(gpio1,gpiooutdir); + gpiosetdir(gpio2,gpiooutdir); + gpiosetdir(gpio3,gpiooutdir); } void bsp_uart_init() @@ -159,8 +159,7 @@ int bsp_FSMC_init() for(int i=0;i<43;i++) { gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); - LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&LCD_DBx); + gpiosetconfig(LCD_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); } @@ -237,8 +236,7 @@ int bsp_FSMC_init() for(int i=0;i<22;i++) { gpio_t SRAM_DBx = gpioopen(SRAM_DBxList[i]); - SRAM_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SRAM_DBx); + gpiosetconfig(SRAM_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SRAM_DBx), (uint8_t)(SRAM_DBx & 0xF), GPIO_AF_FSMC); } /*-- FSMC Configuration ------------------------------------------------------*/ @@ -291,8 +289,7 @@ void bsp_SD_init() for(int i=0;i<6;i++) { gpio_t SDIO_DBx = gpioopen(SDIO_DBxList[i]); - SDIO_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SDIO_DBx); + gpiosetconfig(SDIO_DBx, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SDIO_DBx), (uint8_t)(SDIO_DBx & 0xF), GPIO_AF_SDIO); } } diff --git a/examples/PWM/main.c b/examples/PWM/main.c --- a/examples/PWM/main.c +++ b/examples/PWM/main.c @@ -24,6 +24,7 @@ * the project file. The value BSP contains the board name, and UCMODEL contain * the target architecture. */ +#include int libuc_main() { diff --git a/examples/helloWorld/helloWorld.pro b/examples/helloWorld/helloWorld.pro --- a/examples/helloWorld/helloWorld.pro +++ b/examples/helloWorld/helloWorld.pro @@ -5,7 +5,8 @@ contains( UCMODEL , simulator ) { } contains( UCMODEL , stm32f4 ) { #BSP = STM32F4Eval - BSP = SOSmartPSU + #BSP = SOSmartPSU + BSP = STM32F429Discovery } SOURCES += \ diff --git a/include/PERIPHERALS/gpio.h b/include/PERIPHERALS/gpio.h --- a/include/PERIPHERALS/gpio.h +++ b/include/PERIPHERALS/gpio.h @@ -29,7 +29,7 @@ With this api you will be able to open a A simple example to drive PA0 and read PA1. \code // lets open PA0 and PA1 - gpio_t mygpio1 gpioopen(PA0); + gpio_t mygpio1 = gpioopen(PA0); gpioopen(PA1); mygpio1 |= gpiohighspeed | gpiooutdir | gpiopushpulltype | gpionopulltype; gpiosetconfig(mygpio1); @@ -51,10 +51,10 @@ A simple example to drive PA0 and read P #define GPIO_H #include #ifdef __cplusplus - extern "C" { +extern "C" { #endif - /** +/** * @brief gpio handle * *gpio_t is the handle type you will use for all @@ -65,100 +65,108 @@ A simple example to drive PA0 and read P typedef uint32_t gpio_t; - /** +/** * @brief GPIO speed enum * * Use gpiospeed_t values to configure the speed of your GPIO pin with - * gpiosetspeed(gpio_t* gpio,gpiospeed_t speed) function or gpiosetconfig(gpio_t* gpio). + * gpiosetspeed(gpio_t gpio,gpiospeed_t speed) function or gpiosetconfig(gpio_t gpio). * The speed values are realy platform dependant check for each target if you whant to * know the meaning of each speed. * Don't try to use numerical values directly! - * @sa gpiosetspeed(gpio_t* gpio,gpiospeed_t speed),gpiosetconfig(gpio_t* gpio) + * @sa gpiosetspeed(gpio_t gpio,gpiospeed_t speed),gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ typedef enum gpiospeed_t { - gpiolowspeed = 0x00000, /**< Lowest speed value*/ - gpiomediumspeed = 0x10000, /**< Normal or medium speed value*/ - gpiofastspeed = 0x20000, /**< Higher speed value*/ - gpiohighspeed = 0x30000 /**< Highest speed value*/ + gpiolowspeed = 0, /**< Lowest speed value*/ + gpiomediumspeed, /**< Normal or medium speed value*/ + gpiofastspeed , /**< Higher speed value*/ + gpiohighspeed /**< Highest speed value*/ }gpiospeed_t; - /** +/** * @brief GPIO direction enum * * Use gpiodir_t values to configure the direction of your GPIO pin with - * gpiosetdir(gpio_t* gpio,gpiodir_t dir) function or gpiosetconfig(gpio_t* gpio). + * gpiosetdir(gpio_t gpio,gpiodir_t dir) function or gpiosetconfig(gpio_t gpio). * Don't try to use numerical values directly! - * @sa gpiosetdir(gpio_t* gpio,gpiodir_t dir),gpiosetconfig(gpio_t* gpio) + * @sa gpiosetdir(gpio_t gpio,gpiodir_t dir),gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ typedef enum gpiodir_t { - gpioindir = 0x00000, /**< Input direction*/ - gpiooutdir = 0x40000, /**< Output direction*/ - gpioaf = 0x80000, /**< Alternate function such as spi, uart, ...*/ - gpioan = 0xC0000 /**< Configure the pin for analogic mode*/ + gpioindir = 0,/**< Input direction*/ + gpiooutdir, /**< Output direction*/ + gpioaf, /**< Alternate function such as spi, uart, ...*/ + gpioan /**< Configure the pin for analogic mode*/ }gpiodir_t; - /** +/** * @brief GPIO output type enum * * Use gpioouttype_t values to configure the kind of output you want with - * gpiosetouttype(gpio_t* gpio, gpioouttype_t outtype) function or gpiosetconfig(gpio_t* gpio). + * gpiosetouttype(gpio_t gpio, gpioouttype_t outtype) function or gpiosetconfig(gpio_t gpio). * Don't try to use numerical values directly! - * @sa gpiosetouttype(gpio_t* gpio, gpioouttype_t outtype),gpiosetconfig(gpio_t* gpio) + * @sa gpiosetouttype(gpio_t gpio, gpioouttype_t outtype),gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ typedef enum gpioouttype_t { - gpiopushpulltype = 0x000000, /**< Pushpull output*/ - gpioopendraintype = 0x100000 /**< Open drain output*/ + gpiopushpulltype = 0, /**< Pushpull output*/ + gpioopendraintype /**< Open drain output*/ }gpioouttype_t; - /** +/** * @brief GPIO pull resistor configuration enum * * Use gpiopulltype_t values to configure the pull resistor of your GPIO pin with - * gpiosetpulltype(gpio_t* gpio,gpiopulltype_t pulltype) function or gpiosetconfig(gpio_t* gpio). + * gpiosetpulltype(gpio_t gpio,gpiopulltype_t pulltype) function or gpiosetconfig(gpio_t gpio). * Don't try to use numerical values directly! - * @sa gpiosetpulltype(gpio_t* gpio,gpiopulltype_t pulltype),gpiosetconfig(gpio_t* gpio) + * @sa gpiosetpulltype(gpio_t gpio,gpiopulltype_t pulltype),gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ typedef enum gpiopulltype_t { - gpionopulltype = 0x000000, - gpiopulluptype = 0x200000, - gpiopulldowntype = 0x400000 + gpionopulltype = 0, + gpiopulluptype, + gpiopulldowntype }gpiopulltype_t; +typedef struct +{ + gpiodir_t direction; + gpiospeed_t speed; + gpioouttype_t outType; + gpiopulltype_t pullType; +}gpioconfig_str; + #ifndef DOXYGEN_SHOULD_SKIP_THIS - #define GPIOSPEEDMASK 0x30000 - #define GPIODIRMASK 0xC0000 - #define GPIOOUTTYPEMASK 0x100000 - #define GPIOPULLTYPEMASK 0x600000 +#define GPIOSPEEDMASK 0x30000 +#define GPIODIRMASK 0xC0000 +#define GPIOOUTTYPEMASK 0x100000 +#define GPIOPULLTYPEMASK 0x600000 #endif - /** +/** * @brief gpioopen * @param gpio * @return * @sa gpioclose(gpio_t gpio) - * @ingroup GPIO * * \ingroup GPIO */ extern gpio_t gpioopen(uint32_t gpio); +extern gpio_t gpioopenandconfig(uint32_t gpio, gpioconfig_str* config); /** * @brief gpioclose * @param gpio @@ -170,10 +178,17 @@ extern void gpioclose(gpio_t gpio); /** * @brief gpiosetconfig * @param gpio + * @param direction + * @param speed + * @param outType + * @param pullType * * \ingroup GPIO */ -extern void gpiosetconfig(gpio_t* gpio); +extern void gpiosetconfig(gpio_t gpio, gpiodir_t direction, gpiospeed_t speed, gpioouttype_t outType, gpiopulltype_t pullType); +extern void gpiosetconfigstr(gpio_t gpio, gpioconfig_str *config); + + /** * @brief gpiosetdir * @param gpio @@ -181,38 +196,38 @@ extern void gpiosetconfig(gpio_t* gpio); * * \ingroup GPIO */ -extern void gpiosetdir(gpio_t* gpio,gpiodir_t dir); +extern void gpiosetdir(gpio_t gpio,gpiodir_t dir); /** * @brief gpiosetouttype * @param gpio * @param outtype - * @sa gpiosetconfig(gpio_t* gpio) + * @sa gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ -extern void gpiosetouttype(gpio_t* gpio, gpioouttype_t outtype); +extern void gpiosetouttype(gpio_t gpio, gpioouttype_t outtype); /** * @brief gpiosetpulltype * @param gpio * @param pulltype - * @sa gpiosetconfig(gpio_t* gpio) + * @sa gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ -extern void gpiosetpulltype(gpio_t* gpio,gpiopulltype_t pulltype); +extern void gpiosetpulltype(gpio_t gpio,gpiopulltype_t pulltype); /** * @brief gpiosetspeed * @param gpio * @param speed - * @sa gpiosetconfig(gpio_t* gpio) + * @sa gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ -extern void gpiosetspeed(gpio_t* gpio,gpiospeed_t speed); +extern void gpiosetspeed(gpio_t gpio,gpiospeed_t speed); /** * @brief gpioset * @param gpio - * @sa gpiosetconfig(gpio_t* gpio) + * @sa gpiosetconfig(gpio_t gpio) * * \ingroup GPIO */ @@ -243,20 +258,20 @@ extern int gpiogetval(gpio_t gpio); #ifndef DOXYGEN_SHOULD_SKIP_THIS -#define GPIOISINPUT(gpio) (((gpio) & GPIODIRMASK)==gpioindir) -#define GPIOISOUTPUT(gpio) (((gpio) & GPIOSPEEDMASK)==gpiooutdir) +//#define GPIOISINPUT(gpio) (((gpio) & GPIODIRMASK)==gpioindir) +//#define GPIOISOUTPUT(gpio) (((gpio) & GPIOSPEEDMASK)==gpiooutdir) -#define GPIOISLOWSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiolowspeed) -#define GPIOISMEDIUMSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiomediumspeed) -#define GPIOISFASTPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiofastspeed) -#define GPIOISHIGHSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiohighspeeds) +//#define GPIOISLOWSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiolowspeed) +//#define GPIOISMEDIUMSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiomediumspeed) +//#define GPIOISFASTPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiofastspeed) +//#define GPIOISHIGHSPEED(gpio) (((gpio) & GPIOSPEEDMASK)==gpiohighspeeds) -#define GPIOISPUSHPULL(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpiopushpulltype) -#define GPIOISOPENDRAIN(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpioopendraintype) +//#define GPIOISPUSHPULL(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpiopushpulltype) +//#define GPIOISOPENDRAIN(gpio) (((gpio) & GPIOOUTTYPEMASK)==gpioopendraintype) -#define GPIOISNOPULL(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpionopulltype) -#define GPIOISPULLUP(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulluptype) -#define GPIOISPULLDOWN(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulldowntype) +//#define GPIOISNOPULL(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpionopulltype) +//#define GPIOISPULLUP(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulluptype) +//#define GPIOISPULLDOWN(GPIO) (((gpio) & GPIOPULLTYPEMASK)==gpiopulldowntype) #define PA0 ((0<<8)+0) @@ -705,7 +720,7 @@ extern int gpiogetval(gpio_t gpio); #endif #ifdef __cplusplus - } +} #endif #endif //GPIO_H diff --git a/include/core.h b/include/core.h --- a/include/core.h +++ b/include/core.h @@ -30,6 +30,8 @@ extern uint32_t getCpuFreq(); extern int setCpuFreq(uint32_t freq); extern int optimizePLLcfg(uint32_t freq, uint32_t srcfreq,uint32_t PLLM,uint32_t* PLLP, uint32_t* PLLN,uint8_t* AHBPRindx); extern int setPll(uint32_t freq); +extern void getCpuUUID(char*uuid); +extern int getCpuUUIDLen(); extern void enable_FPU(); extern void reset_AHB1(); extern void reset_AHB2(); diff --git a/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c b/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c --- a/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c +++ b/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c @@ -248,8 +248,8 @@ void ili9328paintFilCirc_old(LCD_t* LCD, for(int32_t line=-r;line -extern float32_t optimised_sqrt(float32_t value); +extern float optimised_sqrt(float value); -extern float optimised_sin(float32_t x); +extern float optimised_sin(float x); #endif diff --git a/src/stm32f4/CPU/cpu.c b/src/stm32f4/CPU/cpu.c --- a/src/stm32f4/CPU/cpu.c +++ b/src/stm32f4/CPU/cpu.c @@ -1,4 +1,6 @@ #include +#include + float32_t optimised_sqrt(float32_t value) { float32_t out; diff --git a/src/stm32f4/DAC/dac.c b/src/stm32f4/DAC/dac.c --- a/src/stm32f4/DAC/dac.c +++ b/src/stm32f4/DAC/dac.c @@ -25,8 +25,7 @@ int dacopen(uint32_t pin) RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); gpio_t DACOUT; DACOUT = gpioopen(pin); - DACOUT |= gpioan | gpionopulltype; - gpiosetconfig(&DACOUT); + gpiosetconfig(DACOUT, gpioan, gpiolowspeed, gpiopushpulltype, gpionopulltype); return 0; } diff --git a/src/stm32f4/GPIO/gpio.c b/src/stm32f4/GPIO/gpio.c --- a/src/stm32f4/GPIO/gpio.c +++ b/src/stm32f4/GPIO/gpio.c @@ -29,342 +29,212 @@ gpio_t gpioopen(uint32_t gpio) { - gpio &= -1^GPIOSPEEDMASK; - gpio |= gpiolowspeed; - gpio &= -1^GPIODIRMASK; - gpio |= gpioindir; - gpio &= -1^GPIOOUTTYPEMASK; - gpio |= gpiopushpulltype; - gpio &= -1^GPIOPULLTYPEMASK; - gpio |= gpionopulltype; - gpiosetconfig(&gpio); - RCC_AHB1PeriphClockCmd(((uint32_t)0x00000001<direction, config->speed, config->outType, config->pullType); + RCC_AHB1PeriphClockCmd(((uint32_t)0x00000001<direction, config->speed, config->outType, config->pullType); } -extern void gpiosetspeed(gpio_t* gpio,gpiospeed_t speed) +extern void gpiosetspeed(gpio_t gpio,gpiospeed_t speed) { - GPIO_TypeDef* GPIOx = GPIOGETPORT((*gpio)); - switch(speed) - { - case gpiolowspeed : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (i * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_2MHz) << (i * 2)); - } - } - else - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << ((*gpio & 0xFF) * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_2MHz) << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOSPEEDMASK; - *gpio |= gpiolowspeed; - break; - case gpiomediumspeed : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (i * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_25MHz) << (i * 2)); - } - } - else - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << ((*gpio & 0xFF) * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_25MHz) << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOSPEEDMASK; - *gpio |= gpiomediumspeed; - break; - case gpiofastspeed : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (i * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_50MHz) << (i * 2)); - } - } - else - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << ((*gpio & 0xFF) * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_50MHz) << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOSPEEDMASK; - *gpio |= gpiofastspeed; - break; - case gpiohighspeed : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (i * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_100MHz) << (i * 2)); - } - } - else - { - GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << ((*gpio & 0xFF) * 2)); - GPIOx->OSPEEDR |= ((uint32_t)(GPIO_Speed_100MHz) << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOSPEEDMASK; - *gpio |= gpiohighspeed; - break; - } + GPIO_TypeDef* GPIOx = GPIOGETPORT((gpio)); + uint32_t speedMask = GPIO_Speed_2MHz; + switch(speed) + { + case gpiolowspeed : + speedMask = GPIO_Speed_2MHz; + break; + case gpiomediumspeed : + speedMask = GPIO_Speed_25MHz; + break; + case gpiofastspeed : + speedMask = GPIO_Speed_50MHz; + break; + case gpiohighspeed : + speedMask = GPIO_Speed_100MHz; + break; + } + if((gpio & 0xFF)==0xFF) + { + for(int i=0;i<16;i++) + { + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (i * 2)); + GPIOx->OSPEEDR |= ((speedMask) << (i * 2)); + } + } + else + { + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << ((gpio & 0xFF) * 2)); + GPIOx->OSPEEDR |= ((speedMask) << ((gpio & 0xFF) * 2)); + } } -void gpiosetdir(gpio_t* gpio,gpiodir_t dir) +void gpiosetdir(gpio_t gpio, gpiodir_t dir) { - GPIO_TypeDef* GPIOx = GPIOGETPORT((*gpio)); - switch(dir) - { - case gpiooutdir: - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (i * 2)); - GPIOx->MODER |= (GPIO_Mode_OUT << (i * 2)); - } - } - else - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << ((*gpio & 0xFF) * 2)); - GPIOx->MODER |= (GPIO_Mode_OUT << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIODIRMASK; - *gpio |= gpiooutdir; - break; - case gpioaf: - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (i * 2)); - GPIOx->MODER |= (GPIO_Mode_AF << (i * 2)); - } - } - else - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << ((*gpio & 0xFF) * 2)); - GPIOx->MODER |= (GPIO_Mode_AF << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIODIRMASK; - *gpio |= gpioaf; - break; - case gpioan: - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (i * 2)); - GPIOx->MODER |= (GPIO_Mode_AN << (i * 2)); - } - } - else - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << ((*gpio & 0xFF) * 2)); - GPIOx->MODER |= (GPIO_Mode_AN << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIODIRMASK; - *gpio |= gpioan; - break; - default : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (i * 2)); - GPIOx->MODER |= (GPIO_Mode_IN << (i * 2)); - } - } - else - { - GPIOx->MODER &= ~(GPIO_MODER_MODER0 << ((*gpio & 0xFF) * 2)); - GPIOx->MODER |= (GPIO_Mode_IN << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIODIRMASK; - *gpio |= gpioindir; - break; - } - + GPIO_TypeDef* GPIOx = GPIOGETPORT((gpio)); + uint32_t directionMask = GPIO_Mode_IN; + switch(dir) + { + case gpiooutdir: + directionMask = GPIO_Mode_OUT; + break; + case gpioaf: + directionMask = GPIO_Mode_AF; + break; + case gpioan: + directionMask = GPIO_Mode_AN; + break; + } + if((gpio & 0xFF)==0xFF) + { + for(int i=0;i<16;i++) + { + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (i * 2)); + GPIOx->MODER |= (directionMask << (i * 2)); + } + } + else + { + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << ((gpio & 0xFF) * 2)); + GPIOx->MODER |= (directionMask << ((gpio & 0xFF) * 2)); + } } -void gpiosetouttype(gpio_t* gpio, gpioouttype_t outtype) +void gpiosetouttype(gpio_t gpio, gpioouttype_t outtype) { - GPIO_TypeDef* GPIOx = GPIOGETPORT((*gpio)); - if(outtype == gpioopendraintype) - { - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)i)); - GPIOx->OTYPER |= (uint16_t)(GPIO_OType_OD<<((uint16_t)i)); - } - } - else - { - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)(*gpio & 0xFF))); - GPIOx->OTYPER |= (uint16_t)(GPIO_OType_OD<<((uint16_t)(*gpio & 0xFF))); - } - *gpio &= ~GPIOOUTTYPEMASK; - *gpio |= gpioopendraintype; - } - else - { - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)i)); - GPIOx->OTYPER |= (uint16_t)(GPIO_OType_PP<<((uint16_t)i)); - } - } - else - { - GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)(*gpio & 0xFF))); - GPIOx->OTYPER |= (uint16_t)(GPIO_OType_PP<<((uint16_t)(*gpio & 0xFF))); - } - *gpio &= ~GPIOOUTTYPEMASK; - *gpio |= gpiopushpulltype; - } + GPIO_TypeDef* GPIOx = GPIOGETPORT((gpio)); + uint16_t outTypeMask = GPIO_OType_PP; + if(outtype == gpioopendraintype) + outTypeMask = GPIO_OType_OD; + else + outTypeMask = GPIO_OType_PP; + + if((gpio & 0xFF)==0xFF) + { + for(int i=0;i<16;i++) + { + GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)i)); + GPIOx->OTYPER |= (uint16_t)(outTypeMask<<((uint16_t)i)); + } + } + else + { + GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)(gpio & 0xFF))); + GPIOx->OTYPER |= (uint16_t)(outTypeMask<<((uint16_t)(gpio & 0xFF))); + } } -void gpiosetpulltype(gpio_t* gpio,gpiopulltype_t pulltype) +void gpiosetpulltype(gpio_t gpio,gpiopulltype_t pulltype) { - GPIO_TypeDef* GPIOx = GPIOGETPORT(*gpio); - switch(pulltype) - { - case gpiopulluptype: - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)i * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_UP << (i * 2)); - } - } - else - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)(*gpio & 0xFF) * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_UP << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOPULLTYPEMASK; - *gpio |= gpiopulluptype; - break; - case gpiopulldowntype: - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)i * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_DOWN << (i * 2)); - } - } - else - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)(*gpio & 0xFF) * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_DOWN << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOPULLTYPEMASK; - *gpio |= gpiopulldowntype; - break; - default : - if((*gpio & 0xFF)==0xFF) - { - for(int i=0;i<16;i++) - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)i * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_NOPULL << (i * 2)); - } - } - else - { - GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)(*gpio & 0xFF) * 2)); - GPIOx->PUPDR |= (GPIO_PuPd_NOPULL << ((*gpio & 0xFF) * 2)); - } - *gpio &= ~GPIOPULLTYPEMASK; - *gpio |= gpionopulltype; - break; - } + GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); + uint32_t pullTypeMask=GPIO_PuPd_NOPULL; + switch(pulltype) + { + case gpiopulluptype: + pullTypeMask=GPIO_PuPd_UP; + break; + case gpiopulldowntype: + pullTypeMask=GPIO_PuPd_DOWN; + break; + default : + pullTypeMask=GPIO_PuPd_NOPULL; + break; + } + if((gpio & 0xFF)==0xFF) + { + for(int i=0;i<16;i++) + { + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)i * 2)); + GPIOx->PUPDR |= (pullTypeMask << (i * 2)); + } + } + else + { + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)(gpio & 0xFF) * 2)); + GPIOx->PUPDR |= (pullTypeMask << ((gpio & 0xFF) * 2)); + } } void gpioset(gpio_t gpio) { - GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); - if((gpio & 0xFF)==0xFF) - { - GPIOx->BSRRL = -1; - } - else - { - GPIOx->BSRRL = 1<<(gpio & 0xFF); - } + GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); + if((gpio & 0xFF)==0xFF) + { + GPIOx->BSRRL = -1; + } + else + { + GPIOx->BSRRL = 1<<(gpio & 0xFF); + } } void gpioclr(gpio_t gpio) { - GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); - if((gpio & 0xFF)==0xFF) - { - GPIOx->BSRRH = -1; - } - else - { - GPIOx->BSRRH = 1<<(gpio & 0xFF); - } + GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); + if((gpio & 0xFF)==0xFF) + { + GPIOx->BSRRH = -1; + } + else + { + GPIOx->BSRRH = 1<<(gpio & 0xFF); + } } void gpiosetval(gpio_t gpio,int val) { - GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); - if((gpio & 0xFF)==0xFF) - { - GPIOx->ODR = val; - } - else - { + GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); + if((gpio & 0xFF)==0xFF) + { + GPIOx->ODR = val; + } + else + { if(val) GPIOx->BSRRL = 1<<(gpio & 0xFF); else GPIOx->BSRRH = 1<<(gpio & 0xFF); - } + } } int gpiogetval(gpio_t gpio) { - GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); - if((gpio & 0xFF)==0xFF) - { - return GPIOx->IDR; - } - else - { - return ((GPIOx->IDR>>(gpio & 0xFF)) & 1); - } + GPIO_TypeDef* GPIOx = GPIOGETPORT(gpio); + if((gpio & 0xFF)==0xFF) + { + return GPIOx->IDR; + } + else + { + return ((GPIOx->IDR>>(gpio & 0xFF)) & 1); + } } diff --git a/src/stm32f4/I2C/i2c.c b/src/stm32f4/I2C/i2c.c --- a/src/stm32f4/I2C/i2c.c +++ b/src/stm32f4/I2C/i2c.c @@ -103,9 +103,7 @@ int i2csetpins(i2c_t dev, uint32_t SDA, gpio_t SDApin,SCLpin; SDApin = gpioopen(SDA); SCLpin = gpioopen(SCL); - SDApin |= gpiolowspeed | gpioaf | gpioopendraintype | gpionopulltype; - SCLpin |= gpiolowspeed | gpiooutdir | gpioopendraintype | gpionopulltype; - gpiosetconfig(&SCLpin); + gpiosetconfig(SCLpin, gpiooutdir, gpiolowspeed, gpioopendraintype, gpionopulltype); for(int i=0;i<32;i++) { gpioclr(SCLpin); @@ -116,9 +114,8 @@ int i2csetpins(i2c_t dev, uint32_t SDA, {__asm__("nop");} } SCLpin = gpioopen(SCL); - SCLpin |= gpiolowspeed | gpioaf | gpioopendraintype | gpionopulltype; - gpiosetconfig(&SDApin); - gpiosetconfig(&SCLpin); + gpiosetconfig(SDApin, gpioaf, gpiolowspeed, gpioopendraintype, gpionopulltype); + gpiosetconfig(SCLpin, gpioaf, gpiolowspeed, gpioopendraintype, gpionopulltype); uint8_t gpioAFi2cx = GPIO_AF_I2C1; switch(dev) { diff --git a/src/stm32f4/PWM/pwm.c b/src/stm32f4/PWM/pwm.c --- a/src/stm32f4/PWM/pwm.c +++ b/src/stm32f4/PWM/pwm.c @@ -20,8 +20,7 @@ int pwmopen(int PWM,uint32_t pin) int timer = PWMGETTIMNUMBER(PWM); gpio_t PWMOUT; PWMOUT = gpioopen(pin); - PWMOUT |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&PWMOUT); + gpiosetconfig(PWMOUT, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); uint8_t GPIO_AF = -1; if(timer==timer1 || timer==timer2)GPIO_AF=1; if(timer==timer3 || timer==timer4 || timer==timer5)GPIO_AF=2; diff --git a/src/stm32f4/SPI/spi.c b/src/stm32f4/SPI/spi.c --- a/src/stm32f4/SPI/spi.c +++ b/src/stm32f4/SPI/spi.c @@ -123,31 +123,25 @@ int spisetpins(spi_t spidev,uint32_t MOS if(MISOpin!=-1) { MISO = gpioopen(MISOpin); - MISO |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&MISO); + gpiosetconfig(MISO, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(MISO), (uint8_t)(MISO & 0xF), gpioAFspix); } if(MOSIpin!=-1) { MOSI = gpioopen(MOSIpin); - MOSI |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&MOSI); + gpiosetconfig(MOSI, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(MOSI), (uint8_t)(MOSI & 0xF), gpioAFspix); } - if(SCKpin!=-1) { SCK = gpioopen(SCKpin); - SCK |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SCK); + gpiosetconfig(SCK, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SCK), (uint8_t)(SCK & 0xF), gpioAFspix); } - if(SCSpin!=-1) { SCS = gpioopen(SCSpin); - SCS |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&SCS); + gpiosetconfig(SCS, gpioaf, gpiohighspeed, gpiopushpulltype, gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(SCS), (uint8_t)(SCS & 0xF), gpioAFspix); _dev_->CR2 |= (1<<2); } diff --git a/src/stm32f4/UART/uart.c b/src/stm32f4/UART/uart.c --- a/src/stm32f4/UART/uart.c +++ b/src/stm32f4/UART/uart.c @@ -36,6 +36,23 @@ int _uartstrsetpos(streamdevice* device, int _uartstrread(streamdevice* device,void* data,int size, int n); int _uartstrwrite(streamdevice* device,void* data,int size, int n); +typedef struct _dma_pointer_ +{ + int pos; + int size; +}_dma_pointer_; + +#ifdef UART_USES_DMA + static char _uart_dma_buff[1024]; + _dma_pointer_ _uart1_dma_pointer={0,0}; + _dma_pointer_ _uart2_dma_pointer={0,0}; + _dma_pointer_ _uart3_dma_pointer={0,0}; + _dma_pointer_ _uart4_dma_pointer={0,0}; + _dma_pointer_ _uart5_dma_pointer={0,0}; + _dma_pointer_ _uart6_dma_pointer={0,0}; + _dma_pointer_* _uart_dma_pointer_table[6]={&_uart1_dma_pointer,&_uart2_dma_pointer,&_uart3_dma_pointer,&_uart4_dma_pointer,&_uart5_dma_pointer,&_uart6_dma_pointer}; +#endif + streamdevice_ops UART_OPS= { .write = &_uartstrwrite, @@ -143,10 +160,8 @@ int uartsetpins(uart_t uart,uint32_t TXp gpio_t TX,RX,CTS,RTS; TX = gpioopen(TXpin); RX = gpioopen(RXpin); - TX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype; - RX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&TX); - gpiosetconfig(&RX); + gpiosetconfig(TX,gpioaf,gpiolowspeed,gpiopushpulltype,gpionopulltype); + gpiosetconfig(RX,gpioaf,gpiolowspeed,gpiopushpulltype,gpionopulltype); uint8_t gpioAFuartx = GPIO_AF_USART1; switch(uart) { @@ -179,16 +194,14 @@ int uartsetpins(uart_t uart,uint32_t TXp if(CTSpin!=-1) { CTS = gpioopen(CTSpin); - CTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&CTS); + gpiosetconfig(CTS,gpioaf,gpiolowspeed,gpiopushpulltype,gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(CTS), (uint8_t)(CTS & 0xF), gpioAFuartx); } if(RTSpin!=-1) { RTS = gpioopen(RTSpin); - RTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype; - gpiosetconfig(&RTS); + gpiosetconfig(RTS,gpioaf,gpiolowspeed,gpiopushpulltype,gpionopulltype); GPIO_PinAFConfig(GPIOGETPORT(RTS), (uint8_t)(RTS & 0xF), gpioAFuartx); } } @@ -356,6 +369,7 @@ int uartsetstopbits(uart_t uart,uartstop return -1; } +#ifdef UART_USES_DMA int uartputc(uart_t uart,char c) { if((uart<6)&&(uart>=0)) @@ -367,7 +381,19 @@ int uartputc(uart_t uart,char c) } return -1; } - +#else +int uartputc(uart_t uart,char c) +{ + if((uart<6)&&(uart>=0)) + { + USART_TypeDef* _dev_ = _uart_dev_table[(int)uart]; + while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7)); + _dev_->DR = c; + return 1; + } + return -1; +} +#endif char uartgetc(uart_t uart) { if((uart<6)&&(uart>=0)) diff --git a/src/stm32f4/UART/uart.pro b/src/stm32f4/UART/uart.pro --- a/src/stm32f4/UART/uart.pro +++ b/src/stm32f4/UART/uart.pro @@ -5,6 +5,8 @@ SOURCES += uart.c UCMODEL=stm32f4 +#DEFINES += UART_USES_DMA + HEADERS += \ ../../../include/PERIPHERALS/uart.h