diff --git a/ked/csl/stm32f042/config.cmake b/ked/csl/stm32f042/config.cmake index 61c16be..c299e66 100644 --- a/ked/csl/stm32f042/config.cmake +++ b/ked/csl/stm32f042/config.cmake @@ -78,4 +78,5 @@ list(APPEND EXTRA_LIBS sub::init) list(APPEND EXTRA_LIBS sub::max7219) list(APPEND EXTRA_LIBS sub::spi) list(APPEND EXTRA_LIBS sub::imp_spi) -list(APPEND EXTRA_LIBS sub::pin) +list(APPEND EXTRA_LIBS sub::pin) +list(APPEND EXTRA LIBS sub::ad9833) diff --git a/ked/device_drivers/CMakeLists.txt b/ked/device_drivers/CMakeLists.txt index 1fd19a1..6e74516 100644 --- a/ked/device_drivers/CMakeLists.txt +++ b/ked/device_drivers/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(max7219) +add_subdirectory(ad9833) diff --git a/ked/device_drivers/ad9833/CMakeLists.txt b/ked/device_drivers/ad9833/CMakeLists.txt new file mode 100644 index 0000000..064f62e --- /dev/null +++ b/ked/device_drivers/ad9833/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(AD9833 ad9833.c) +target_compile_options(AD9833 PRIVATE ${C_FLAGS}) +target_compile_definitions(AD9833 PRIVATE ${C_DEFS}) +target_include_directories(AD9833 PUBLIC . ${INTERFACES_DIR} ${CSL_INCLUDES}) +add_library(sub::ad9833 ALIAS AD9833) diff --git a/ked/device_drivers/ad9833/ad9833.c b/ked/device_drivers/ad9833/ad9833.c index e75a91a..7764bb5 100644 --- a/ked/device_drivers/ad9833/ad9833.c +++ b/ked/device_drivers/ad9833/ad9833.c @@ -1,5 +1,6 @@ +#include "ad9833.h" + typedef enum { - _bit_FSELECT = 0x00, _bit_D1 = 0x00, _bit_MODE = 0x0002, _bit_DIV2 = 0x0008, @@ -25,8 +26,9 @@ void ad9833_init( uint16_t f0, uint16_t f1, uint16_t p0, - uint16_t p1); + uint16_t p1) { + // perform init sequence according to Figure 27. spiWrite16bit(device->spiCH, _bit_RESET); spiWrite16bit(device->spiCH, 0); @@ -34,43 +36,43 @@ void ad9833_init( // set device directly in full powerdown mode, sinosoidal output device->ctrlReg = _bit_SLEEP1 | _bit_SLEEP12; - spiWrite16bit(device->ctrlReg); + spiWrite16bit(device->spiCH, device->ctrlReg); } void ad9833_setRefFrequency( ad9833_t *device, - float fref); + float fref) { } void ad9833_reset( - ad9833_t *device); + ad9833_t *device) { } void ad9833_setSleepMode( ad9833_t *device, - ad9833_sleepMode_t sleepMode); + ad9833_sleepMode_t sleepMode) { } void ad9833_setOutputSinosoidal( - ad9833_t *device); + ad9833_t *device) { } void ad9833_setOutputTrangle( - ad9833_t *device); + ad9833_t *device) { } void ad9833_setOutputMSBofDACData( - ad9833_t *device); + ad9833_t *device) { @@ -78,7 +80,7 @@ void ad9833_setOutputMSBofDACData( void ad9833_setFrequency0( ad9833_t *device, - uint16_t f0); + uint16_t f0) { } diff --git a/ked/device_drivers/ad9833/ad9833.h b/ked/device_drivers/ad9833/ad9833.h index 881f49c..4ea046c 100644 --- a/ked/device_drivers/ad9833/ad9833.h +++ b/ked/device_drivers/ad9833/ad9833.h @@ -26,9 +26,14 @@ typedef enum{ * @param device * @param sleepMode */ + void ad9833_init( ad9833_t *device, - ad9833_sleepMode_t sleepMode); + ad9833_sleepMode_t sleepMode, + uint16_t f0, + uint16_t f1, + uint16_t p0, + uint16_t p1); /** * @brief diff --git a/main.c b/main.c index dc57805..bd173b3 100644 --- a/main.c +++ b/main.c @@ -6,235 +6,14 @@ #include "timer.h" #include "spi.h" #include "max7219.h" -//#include "ked/device_drivers/max7219/max7219.h" - -#if 0 -typedef enum{ - NO_DECODE_DIGIT_7_TO_0 = 0x00, - CODE_B_DECODE_ONLY_DIGIT_0 = 0x01, - CODE_B_DECODE_ONLY_DIGIT_3_TO_0 = 0x0F, - CODE_B_DECOD_DIGIT_7_TO_0 = 0xFF -}max7219_decodeMode_t; - -typedef enum{ - DISPLAY_DIGIT_0 = 0x00, - DISPLAY_DIGIT_1_TO_0 = 0x01, - DSIPLAX_DIGIT_2_TO_0 = 0x02, - DSIPLAX_DIGIT_3_TO_0 = 0x03, - DSIPLAX_DIGIT_4_TO_0 = 0x04, - DSIPLAX_DIGIT_5_TO_0 = 0x05, - DSIPLAX_DIGIT_6_TO_0 = 0x06, - DSIPLAX_DIGIT_7_TO_0 = 0x07 -}max7219_scanLimit_t; - -typedef struct{ - spi_ch_t *spiCH; -}max7219_t; - -void max7219_init( - max7219_t *display, - spi_ch_t *spi_ch) -{ - display->spiCH = spi_ch; -} - -void max7219_testDisplay( - max7219_t *display, - uint8_t logic) -{ - spiWriteReg(display->spiCH,0x0F, (logic) ? 0x01 : 0x00); -} - -void max7219_shutdownDiaply( - max7219_t *display, - uint8_t logic) -{ - spiWriteReg(display->spiCH,0x0C, (logic) ? 0x00 : 0x01); -} - -void max7219_setDecodeMode( - max7219_t *display, - max7219_decodeMode_t dmode) -{ - spiWriteReg(display->spiCH,0x09,(uint8_t) dmode); -} - -void max7219_setIntensity( - max7219_t *display, - uint8_t intensity) -{ - spiWriteReg(display->spiCH, 0x0A, intensity & 0x0F); -} - -void max7219_setScanLimit( - max7219_t *display, - max7219_scanLimit_t slimit) -{ - spiWriteReg(display->spiCH, 0x0B, ((uint8_t) slimit) & 0x0F); -} - -void max7219_setAllLEDsOff( - max7219_t *display) -{ - uint8_t i; - for(i = 0; i < 9; i++) { - spiWriteReg(display->spiCH, i, 0x00); - } -} - -void max7219_ledMatrixSetLED( - max7219_t *display, - uint8_t row, - uint8_t col) -{ - - uint8_t val = 0xAE; - - row = (row & 0x07) + 1; - col = 1 << (col & 0x07); - - spiWriteReg(display->spiCH, row,col); -} - -void max7219_rawWrite( - max7219_t *display, - uint8_t reg, - uint8_t data) -{ - spiWriteReg(display->spiCH, reg, data); -} - -void max7219_printLedMatrix( - max7219_t *display, - uint8_t matrix[]) -{ - uint8_t i = 0; - - for(i = 0; i < 8; i ++) { - spiWriteReg(display->spiCH, i+1, matrix[i]); - } -} - -void max7219_ledMatrixUnsetLED( - max7219_t *display, - uint8_t row, - uint8_t col) -{ - row = (row & 0x07) + 1; - col = 1 << (col & 0x07); - // TODO: find out how to turn off LED - spiWriteReg(display->spiCH, row,col+1); -} - - -// daysichained matrix -typedef struct{ - spi_ch_t *spiCH; - uint8_t nDevices; -}max7219_dm_t; - - -void max7219_dm_write( - max7219_dm_t *matrix, - uint8_t **data) -{ - uint8_t i = 0; - uint8_t j = 0; - // TODO: Test it out - for(i = 0; i < 8; i++) { - pinWrite(matrix->spiCH->pin, 0); - for(j = 0; j < matrix->nDevices; j++) { - spiTrx8BitPolling(matrix->spiCH->spi, i+1); // reg - spiTrx8BitPolling(matrix->spiCH->spi, data[j][i]); - } - pinWrite(matrix->spiCH->pin, 1); - - } -} -#endif - - -void dispTest(max7219_t *disp) -{ - max7219_testDisplay(disp, 1); - delayMs(500); - max7219_testDisplay(disp, 0); - delayMs(500); -} - -void max7219_test_display(spi_ch_t* spi_ch) -{ - // set mode to display test - -/* - pinWrite(spi_ch->pin, 0); - spiTrx(spi_ch->spi, 0x0F); - spiTrx(spi_ch->spi, 0x01); - pinWrite(spi_ch->pin,1); -*/ - spiWriteReg(spi_ch,0x0F,0x01); - - //max7219_testDisplay(spi_ch, 1); - -// spiWrite16bit(spi_ch, 0x0F01); - //delayMs(50); -// spiWrite16bit(spi_ch, 0x0F01); - delayMs(200); -/* - pinWrite(spi_ch->pin, 0); - spiTrx(spi_ch->spi, 0x0F); - spiTrx(spi_ch->spi, 0x00); - pinWrite(spi_ch->pin,1); -*/ - - // set mode to shutdown - spiWrite16bit(spi_ch, 0x0F00); - //max7219_testDisplay(spi_ch, 0); - delayMs(200); -/* - pinWrite(spi_ch->pin, 0); - spiTrx(spi_ch->spi, 0x0C); - spiTrx(spi_ch->spi, 0x00); - pinWrite(spi_ch->pin,1); - - -// set mode to shutdown -// spiWrite16bit(spi_ch, 0x0C00); - delayMs(1000);*/ -} - -void max7219_SetIntensity(spi_ch_t* spi_ch, uint8_t intensity) -{ - spiWrite16bit(spi_ch, 0x0A00 | intensity); -} - +#include "ad9833.h" int main(int argc, char *argv[]) { uint8_t i = 0; uint8_t j = 0; - uint8_t matrix[] = { - 0xAA, - 0xFF, - 0xAA, - 0xFF, - 0xAA, - 0xFF, - 0xAA, - 0xFF}; - - uint8_t matrix_1[] = { - 0x11, - 0x11, - 0x11, - 0x11, - 0x11, - 0x11, - 0x11, - 0x11}; spi_ch_t spi_test_channel; - max7219_t ledMatrix; // making array with all available timers delayInitMs(8000000, 1000); // Clock Freq and Divider for ARM library @@ -287,13 +66,9 @@ int main(int argc, char *argv[]) spiSetupCH(&spi_test_channel, SPI_CH_1, pinA3); - // LED Matrix object setup - //ledMatrix.spiCH = &spi_test_channel; - max7219_init(&ledMatrix, &spi_test_channel); - spiEnable(SPI_CH_1); /* - * MAX7219 hoockup for this example + * SPI hoockup for this example * * Signal pin nucleo * -------------------------- @@ -310,66 +85,10 @@ int main(int argc, char *argv[]) delayMs(50); } - max7219_testDisplay(&ledMatrix,1); - delayMs(500); - max7219_testDisplay(&ledMatrix,0); - max7219_shutdownDiaply(&ledMatrix,0); - max7219_setDecodeMode(&ledMatrix, NO_DECODE_DIGIT_7_TO_0); - max7219_setScanLimit(&ledMatrix, DSIPLAX_DIGIT_7_TO_0); - max7219_setIntensity(&ledMatrix,0x01); - - max7219_ledMatrixSetLED(&ledMatrix,0,0); - delayMs(1000); - max7219_setAllLEDsOff(&ledMatrix); -/* - for(i=0; i < 8; i++) { - max7219_ledMatrixSetLED(&ledMatrix,i,i); - delayMs(100); - } -*/ - - while(1) { - max7219_printLedMatrix(&ledMatrix, matrix); - //max7219_ledMatrixSetLED(&ledMatrix, 0, 0); - delayMs(100); - max7219_printLedMatrix(&ledMatrix, matrix_1); - delayMs(100); - } - - while(1) { - for(i=0; i < 0x8; i++) { - max7219_ledMatrixSetLED(&ledMatrix,i,i+j); - delayMs(100); - } - //delayMs(10); - j++; - if(j > 7) j =0; - } - - - - /* - while(1){ - pinToggle(pinB3); - dispTest(&ledMatrix); - //max7219_test_display(&spi_test_channel); - } -*/ - for(i = 0 ; i < 100 ; i++) { - pinWrite(pinB3, 1); - //pinWrite(pinA4,1); - delayMs(100); - pinWrite(pinB3, 0); - //pinWrite(pinA4,0); - delayMs(900); - } - - - //timer_capture_compare_test(timer_2); - //print_Usart(usart2, "All is working fine \r\n"); while(1) { + } return 1;