Tool/software: Code Composer Studio
I would like to manage delta sigma module without interrupts.
Thi is my code:
#define MAX_SAMPLES 32 // samples number
// output data buffer
unsigned int Filter1_Result[MAX_SAMPLES]; // filter_1
unsigned int Filter3_Result[MAX_SAMPLES]; // filter_2
unsigned int Filter2_Result[MAX_SAMPLES]; // filter_3
unsigned int Filter4_Result[MAX_SAMPLES]; // filter_4
unsigned int SDELTA_1;
void sigma_delta_read(void); // data reading function
// delta sigma initialization
void sigma_delta_init(void) {
unsigned int i;
// data buffer initialization
for(i=0; i<=MAX_SAMPLES-1; i++) {
Filter1_Result[i] = 1;
Filter2_Result[i] = 1;
Filter3_Result[i] = 1;
Filter4_Result[i] = 1;
}
// GPIO pin configuration
for(i=122; i<=129; i++) {
GPIO_SetupPinMux(i,GPIO_MUX_CPU1,7);
GPIO_SetupPinOptions(i, GPIO_INPUT, GPIO_ASYNC);
}
// SFDM initializtion and configuration
Sdfm_configureInputCtrl(1, FILTER1, MODE_0);
Sdfm_configureInputCtrl(1, FILTER2, MODE_0);
Sdfm_configureInputCtrl(1, FILTER3, MODE_0);
Sdfm_configureInputCtrl(1, FILTER4, MODE_0);
Sdfm_configureComparator(1, FILTER1, SINC1, OSR_32, 2000, 50);
Sdfm_configureComparator(1, FILTER2, SINC1, OSR_32, 2000, 50);
Sdfm_configureComparator(1, FILTER3, SINC1, OSR_32, 2000, 50);
Sdfm_configureComparator(1, FILTER4, SINC1, OSR_32, 2000, 50);
Sdfm_configureData_filter(1, FILTER1, FILTER_ENABLE, SINC1, OSR_256, DATA_16_BIT, SHIFT_9_BITS);
Sdfm_configureData_filter(1, FILTER2, FILTER_ENABLE, SINC1, OSR_256, DATA_16_BIT, SHIFT_9_BITS);
Sdfm_configureData_filter(1, FILTER3, FILTER_ENABLE, SINC1, OSR_256, DATA_16_BIT, SHIFT_9_BITS);
Sdfm_configureData_filter(1, FILTER4, FILTER_ENABLE, SINC1, OSR_256, DATA_16_BIT, SHIFT_9_BITS);
Sdfm_enableMFE(1);
// no external reset
Sdfm_configureExternalreset(1, FILTER_1_EXT_RESET_DISABLE, FILTER_2_EXT_RESET_DISABLE, FILTER_3_EXT_RESET_DISABLE, FILTER_4_EXT_RESET_DISABLE);
// no interrupts
Sdfm_configureInterrupt(1, FILTER1, IEH_DISABLE, IEL_DISABLE, MFIE_DISABLE, AE_DISABLE);
Sdfm_configureInterrupt(1, FILTER2, IEH_DISABLE, IEL_DISABLE, MFIE_DISABLE, AE_DISABLE);
Sdfm_configureInterrupt(1, FILTER3, IEH_DISABLE, IEL_DISABLE, MFIE_DISABLE, AE_DISABLE);
Sdfm_configureInterrupt(1, FILTER4, IEH_DISABLE, IEL_DISABLE, MFIE_DISABLE, AE_DISABLE);
Sdfm_enableMIE(1);
}
// data reading function
void sigma_delta_read(void) {
unsigned long sdfmReadFlagRegister = 0;
static unsigned int loopCounter1 = 0;
// register SDIFLG reading
sdfmReadFlagRegister = Sdfm_readFlagRegister(1);
Filter1_Result[loopCounter1] = SDFM1_READ_FILTER1_DATA_16BIT;
Filter2_Result[loopCounter1] = SDFM1_READ_FILTER2_DATA_16BIT;
Filter3_Result[loopCounter1] = SDFM1_READ_FILTER3_DATA_16BIT;
Filter4_Result[loopCounter1] = SDFM1_READ_FILTER4_DATA_16BIT;
loopCounter1 = loopCounter1 + 1;
if (loopCounter1 == MAX_SAMPLES) loopCounter1 = 0;
// clear SDIFLG register
// Sdfm_clearFlagRegister(1,sdfmReadFlagRegister);
// register SDIFLG reading
// sdfmReadFlagRegister = Sdfm_readFlagRegister(1);
}
// running function
void sigma_delta_run(void) {
// data reading function
sigma_delta_read();
}
Is it correct?