/* * app.c * * Created on: Apr 3, 2021 * Author: Think */ #include #include #include #include #include "app.h" #include "stm32f4xx_hal.h" #include "CS43L22.h" #define HEARTBEAT 1000 #define BUFFER_SIZE_SINUS 16000 int16_t sinusTable[BUFFER_SIZE_SINUS] = { 0 }; int i = 0; extern I2C_HandleTypeDef hi2c1; extern I2S_HandleTypeDef hi2s2; extern I2S_HandleTypeDef hi2s3; CS43L22 cs43l22; GPIO_InitTypeDef heartBeatLed = {.Pin = GPIO_PIN_13, .Mode = GPIO_MODE_OUTPUT_PP, .Speed = GPIO_SPEED_LOW}; uint32_t ts_blink = 0; uint8_t chipID = 0, revID = 0; uint16_t data = 0; void initSinusTable(void) { //Pour avoir un sinus partant d'une fréquence de 1Hz, il faut AUDIOFREQ_16K cases for(int i = 0; i < BUFFER_SIZE_SINUS; i++) { sinusTable[i] = 4000*sin((1.0/(double)BUFFER_SIZE_SINUS)*(double)i*2.0*M_PI); } } void dacRegDump() { uint8_t regDump[CS43L22_RESGISTER_COUNT] = {0}; if(!CS43L22_RegisterDump(&cs43l22, regDump)) printf("Failed to dump registers\r\n"); else { printf("CS43L22 Register dump :\r\n"); for(int i = 0; i < CS43L22_RESGISTER_COUNT / 3; i++) { printf("%#X = %#X, %#X = %#X, %#X = %#X\r\n", CS43L22_GetRegisterArray()[i*3], regDump[i*3] , CS43L22_GetRegisterArray()[i*3 + 1], regDump[i*3 + 1] , CS43L22_GetRegisterArray()[i*3 + 2], regDump[i*3 + 2]); } } } void setup(void) { HAL_GPIO_Init(GPIOD, &heartBeatLed); if(!CS43L22_Init(&cs43l22, &hi2c1)) printf("Failed to init DAC\r\n"); dacRegDump(); //We set the auto clocking if(!CS43L22_WriteRegister(&cs43l22, CLOCKING_CTL, 0b10000001)) printf("Fail CLOCKING_CTL\r\n"); //... if(!CS43L22_WriteRegister(&cs43l22, INTERFACE_CTL_1, 0b00000111)) printf("Fail INTERFACE_CTL_1\r\n"); if(!CS43L22_WriteRegister(&cs43l22, POWER_CTL_2, 0b10101111)) printf("Fail POWER_CTL_2\r\n"); if(!CS43L22_WriteRegister(&cs43l22, MISC_CTL, 0b00000010)) printf("Fail MISC_CTL\r\n"); /*if(!CS43L22_WriteRegister(&cs43l22, PASSTHROUGH_A_SELECT, 0b10001000)) printf("Fail PASSTHROUGH_A_SELECT\r\n"); if(!CS43L22_WriteRegister(&cs43l22, PASSTHROUGH_B_SELECT, 0b10001000)) printf("Fail PASSTHROUGH_B_SELECT\r\n");*/ //We set the frequency /*if(!CS43L22_WriteRegister(&cs43l22, BEEP_FREQ_ON_TIME, 0b00010000)) printf("Fail BEEP_FREQ_ON_TIME\r\n"); //We set the volume if(!CS43L22_WriteRegister(&cs43l22, BEEP_VOL_OFF_TIME, 0b00000110)) printf("Fail BEEP_VOL_OFF_TIME\r\n"); //We activate the beep to continuous if(!CS43L22_WriteRegister(&cs43l22, BEEP_TONE_CFG, 0b11100000)) printf("Fail BEEP_TONE_CFG\r\n");*/ //We enable the DAC if(!CS43L22_WriteRegister(&cs43l22, POWER_CTL_1, 0b10011110)) printf("Fail POWER_CTL_1\r\n"); initSinusTable(); } void loop(void) { if(HAL_GetTick() - ts_blink > HEARTBEAT) { HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13); if(!CS43L22_GetDeviceID(&cs43l22, &chipID, &revID)) printf("Failed to retrieve CS43L22 ID\r\n"); //else //printf("Device id : %u, revID : %u\r\n", chipID, revID); ts_blink = HAL_GetTick(); } //HAL_I2S_Transmit(&hi2s2, &data, 1, HAL_MAX_DELAY); HAL_I2S_Transmit(&hi2s3, &sinusTable[i++], 2, HAL_MAX_DELAY); if(i == BUFFER_SIZE_SINUS)i=0; HAL_Delay(3); }