diff --git a/examples/BeagleSynthHello/main.c b/examples/BeagleSynthHello/main.c --- a/examples/BeagleSynthHello/main.c +++ b/examples/BeagleSynthHello/main.c @@ -5,12 +5,17 @@ #include #include #include +#include extern streamdevice* __opnfiles__[]; int main() { + CS43L22_t audioDac1; + cs43l22open(&audioDac1,i2c1,0); + char id=cs43l22getID(&audioDac1); + printf("DAC ID=%c\n\r",0x0ff&id); while(1) { for(volatile int i=0;i<1024*2048;i++); diff --git a/lib/includes/CS43L22.h b/lib/includes/CS43L22.h --- a/lib/includes/CS43L22.h +++ b/lib/includes/CS43L22.h @@ -31,10 +31,10 @@ typedef struct CS43L22_t uint8_t devAddress; }CS43L22_t; -extern int cs43l22open(CS43L22_t* dev,uint8_t address); +extern int cs43l22open(CS43L22_t* dev,i2c_t i2cdev,uint8_t A0); +extern uint8_t cs43l22getID(CS43L22_t* dev); - - +#define CS43L22_I2C_ADDRESS 0x4a #define CS43L22_MAP_ID 1 @@ -50,8 +50,8 @@ extern int cs43l22open(CS43L22_t* dev,ui #define CS43L22_MAP_Playback_Ctl_1 0xD #define CS43L22_MAP_Misc_Ctl 0xE #define CS43L22_MAP_Playback_Ctl_2 0xF -#define CS43L22_MAP_Passthrough_A 0x14 -#define CS43L22_MAP_Passthrough_B 0x15 +#define CS43L22_MAP_Passthrough_A_Vol 0x14 +#define CS43L22_MAP_Passthrough_B_Vol 0x15 #define CS43L22_MAP_PCMA_Vol 0x1A #define CS43L22_MAP_PCMB_Vol 0x1B #define CS43L22_MAP_BEEP_Freq 0x1C @@ -68,7 +68,7 @@ extern int cs43l22open(CS43L22_t* dev,ui #define CS43L22_MAP_Limit_Ctl_1 0x27 #define CS43L22_MAP_Limit Ctl_2 0x28 #define CS43L22_MAP_Limiter_Attack 0x29 -#define CS43L22_MAP_Overflow_&_Clock_Status 0x2E +#define CS43L22_MAP_Overflow_And_Clock_Status 0x2E #define CS43L22_MAP_Battery_Compensation 0x2F #define CS43L22_MAP_VP_Battery_Level 0x30 #define CS43L22_MAP_Speaker_Status 0x31 diff --git a/lib/src/common/AUDIO/CS43L22/CS43L22.c b/lib/src/common/AUDIO/CS43L22/CS43L22.c --- a/lib/src/common/AUDIO/CS43L22/CS43L22.c +++ b/lib/src/common/AUDIO/CS43L22/CS43L22.c @@ -19,6 +19,33 @@ -- Author : Alexis Jeandet -- Mail : alexis.jeandet@gmail.com -------------------------------------------------------------------------------*/ +#include +#include +#include +#include + +int cs43l22open(CS43L22_t* dev,i2c_t i2cdev, uint8_t A0) +{ + if(dev != NULL) + { + dev->i2cdev=i2cdev; + dev->devAddress = CS43L22_I2C_ADDRESS | (A0 & 1); + return 1; + } + return -1; +} + +uint8_t cs43l22getID(CS43L22_t* dev) +{ + if(dev != NULL) + { + char DATA[]={CS43L22_MAP_ID}; + i2cwrite(dev->i2cdev,dev->devAddress,DATA,1); + i2cread(dev->i2cdev,dev->devAddress,DATA,1); + return DATA[0]; + } + return -1; +} @@ -27,5 +54,3 @@ - - diff --git a/lib/src/stm32f4/I2C/i2c.c b/lib/src/stm32f4/I2C/i2c.c --- a/lib/src/stm32f4/I2C/i2c.c +++ b/lib/src/stm32f4/I2C/i2c.c @@ -43,17 +43,17 @@ i2c_t i2copen(int count) switch(count) { - case 0: + case i2c1: _INIT_DEV(RCC_APB1Periph_I2C1); - return (i2c_t) 0; + return i2c1; break; - case 1: + case i2c2: _INIT_DEV(RCC_APB1Periph_I2C2); - return (i2c_t) 1; + return i2c2; break; - case 2: + case i2c3: _INIT_DEV(RCC_APB1Periph_I2C3); - return (i2c_t) 2; + return i2c3; break; default: break; @@ -79,15 +79,15 @@ i2c_t i2copenandconfig(int count,uint32_ int i2cclose(i2c_t dev) { - switch((int)dev) + switch(dev) { - case (int)0: + case i2c1: RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); break; - case (int)1: + case i2c2: RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE); break; - case (int)2: + case i2c3: RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C3, ENABLE); break; default: @@ -104,19 +104,31 @@ int i2csetpins(i2c_t dev, uint32_t SDA, SDApin = gpioopen(SDA); SCLpin = gpioopen(SCL); SDApin |= gpiolowspeed | gpioaf | gpioopendraintype | gpionopulltype; + SCLpin |= gpiolowspeed | gpiooutdir | gpioopendraintype | gpionopulltype; + gpiosetconfig(&SCLpin); + for(int i=0;i<32;i++) + { + gpioclr(SCLpin); + for(int l=0;l<200;l++) + {__asm__("nop");} + gpioset(SCLpin); + for(int l=0;l<200;l++) + {__asm__("nop");} + } + SCLpin = gpioopen(SCL); SCLpin |= gpiolowspeed | gpioaf | gpioopendraintype | gpionopulltype; gpiosetconfig(&SDApin); gpiosetconfig(&SCLpin); uint8_t gpioAFi2cx = GPIO_AF_I2C1; - switch((int)dev) + switch(dev) { - case 0: + case i2c1: gpioAFi2cx = GPIO_AF_I2C1; break; - case 1: + case i2c2: gpioAFi2cx = GPIO_AF_I2C2; break; - case 2: + case i2c3: gpioAFi2cx = GPIO_AF_I2C3; break; default: @@ -238,23 +250,25 @@ int i2cread(i2c_t dev,char address,char* while(i2cbusy(dev)); I2C_TypeDef* _dev_ = _i2c_dev_table[(int)dev]; _dev_->CR1 |= (1<<8) | (1<<10); + while(!i2cStatusCheck(dev,0x00030001)); + _dev_->DR= (address<<1) + 1; + while(!i2cStatusCheck(dev, ((uint32_t)0x00070082))); if(count==1) { _dev_->CR1 &= ~(1<<10); } - while(!i2cStatusCheck(dev,0x00030001)); - _dev_->DR= (address<<1) + 1; - while(!i2cStatusCheck(dev, ((uint32_t)0x00070082))); address=_dev_->SR2; - for(int i=0;iSR1 & (1<<6))==0); data[i]=_dev_->DR; } _dev_->CR1 &= ~(1<<10); _dev_->CR1 |= 1<<9; - while((_dev_->SR1 & (1<<6))==0); + while(!i2cStatusCheck(dev, ((uint32_t)0x10000040))); data[count-1]=_dev_->DR; + while(_dev_->CR1 & ((uint16_t)0x0200)); + _dev_->CR1 |= 1<<10; return count; } return -1; @@ -264,10 +278,6 @@ int i2cread(i2c_t dev,char address,char* int i2cStatusCheck(i2c_t dev,int32_t flagMask) { int32_t flag; - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); if((dev<3)&&(dev>=0)) { I2C_TypeDef* _dev_ = _i2c_dev_table[(int)dev]; diff --git a/lib/src/stm32f4/SPI/spi.c b/lib/src/stm32f4/SPI/spi.c --- a/lib/src/stm32f4/SPI/spi.c +++ b/lib/src/stm32f4/SPI/spi.c @@ -40,20 +40,20 @@ spi_t spiopen(int count) switch(count) { - case 0: + case spi1: RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); - return (spi_t) 0; + return spi1; break; - case 1: + case spi2: _INIT_DEV(RCC_APB1Periph_SPI2); - return (spi_t) 1; + return spi2; break; - case 2: + case spi3: _INIT_DEV(RCC_APB1Periph_SPI3); - return (spi_t) 2; + return spi3; break; default: break; @@ -81,13 +81,13 @@ int spiclose(spi_t spidev) { switch(spidev) { - case 0: + case spi1: RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); break; - case 1: + case spi2: RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); break; - case 2: + case spi3: RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE); break; default: @@ -108,13 +108,13 @@ int spisetpins(spi_t spidev,uint32_t MOS uint8_t gpioAFspix = GPIO_AF_SPI1; switch(spidev) { - case 0: + case spi1: gpioAFspix = GPIO_AF_SPI1; break; - case 1: + case spi2: gpioAFspix = GPIO_AF_SPI2; break; - case 2: + case spi3: gpioAFspix = GPIO_AF_SPI3; break; default: diff --git a/lib/src/stm32f4/UART/uart.c b/lib/src/stm32f4/UART/uart.c --- a/lib/src/stm32f4/UART/uart.c +++ b/lib/src/stm32f4/UART/uart.c @@ -36,48 +36,48 @@ uart_t uartopen(int count) switch(count) { - case 0: + case uart1: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART1->CR3 &= ~((1<<8) + (1<<9)); - return (uart_t)0; + return uart1; break; - case 1: + case uart2: RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); USART2->CR3 &= ~((1<<8) + (1<<9)); - return (uart_t)1; + return uart2; break; - case 2: + case uart3: RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); USART3->CR3 &= ~((1<<8) + (1<<9)); - return (uart_t)2; + return uart3; break; - case 3: + case uart4: RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); UART4->CR3 &= ~((1<<8) + (1<<9)); - return (uart_t)3; + return uart4; break; - case 4: + case uart5: RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); - return (uart_t)4; + return uart5; break; - case 5: + case uart6: RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - return (uart_t)5; + return uart6; break; default: break; @@ -90,7 +90,7 @@ uart_t uartopenandconfig(int count, uint uart_t dev= uartopen(count); uartsetconfig(dev,cfg,speed); uartsetpins(dev,TXpin,RXpin,RTSpin,CTSpin); - return 1; + return dev; } @@ -98,22 +98,22 @@ int uartclose(uart_t uart) { switch(uart) { - case 0: + case uart1: RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); break; - case 1: + case uart2: RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); break; - case 2: + case uart3: RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); break; - case 3: + case uart4: RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); break; - case 4: + case uart5: RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); break; - case 5: + case uart6: RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE); break; default: @@ -137,22 +137,22 @@ int uartsetpins(uart_t uart,uint32_t TXp uint8_t gpioAFuartx = GPIO_AF_USART1; switch(uart) { - case 0: + case uart1: gpioAFuartx = GPIO_AF_USART1; break; - case 1: + case uart2: gpioAFuartx = GPIO_AF_USART2; break; - case 2: + case uart3: gpioAFuartx = GPIO_AF_USART3; break; - case 3: + case uart4: gpioAFuartx = GPIO_AF_UART4; break; - case 4: + case uart5: gpioAFuartx = GPIO_AF_UART5; break; - case 5: + case uart6: gpioAFuartx = GPIO_AF_USART6; break; default: @@ -448,16 +448,3 @@ int uartmkstreamdev(uart_t uart,streamde - - - - - - - - - - - - - diff --git a/rules/common/librules.pri b/rules/common/librules.pri --- a/rules/common/librules.pri +++ b/rules/common/librules.pri @@ -9,6 +9,9 @@ INCLUDEPATH += $$LIBUC_LIBS_DIR/includes LIBUC_BIN_LIBS_DIR = $$LIBUC_LIBS_DIR/bin/$$ARCH LIBS += -L$$LIBUC_LIBS_DIR/bin/$$ARCH \ + -lCS43L22 + +LIBS += -L$$LIBUC_LIBS_DIR/bin/$$ARCH \ -lsdcard LIBS += -L$$LIBUC_LIBS_DIR/bin/$$ARCH \