Skip to content

Commit 52197f2

Browse files
committed
non functional dac setup
1 parent fc0538a commit 52197f2

File tree

12 files changed

+83
-468
lines changed

12 files changed

+83
-468
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ SRC = main.c \
9393
$(HALS)/stm32f7xx_hal_pwr.c \
9494
$(HALS)/stm32f7xx_hal_pwr_ex.c \
9595
$(HALS)/stm32f7xx_hal_rng.c \
96+
$(HALS)/stm32f7xx_hal_sai.c \
9697
$(HALS)/stm32f7xx_hal_spi.c \
9798
$(HALS)/stm32f7xx_hal_tim.c \
9899
$(HALS)/stm32f7xx_hal_tim_ex.c \

lib/flash.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
#include "stm32f7xx.h"
44

5-
// 16kB calibration
6-
#define CALIBRATION_LOCATION 0x0800C000
7-
#define CALIBRATION_SECTOR FLASH_SECTOR_3
8-
#define CALIBRATION_SIZE (0x4000 - 4)
9-
10-
// 64kB user script
11-
#define USER_SCRIPT_LOCATION 0x08010000
12-
#define USER_SCRIPT_SECTOR FLASH_SECTOR_4
5+
// 16kB calibration -> using 256kB
6+
#define CALIBRATION_LOCATION 0x08180000
7+
#define CALIBRATION_SECTOR FLASH_SECTOR_10 // UNUSED
8+
#define CALIBRATION_SIZE (0x40000 - 4)
9+
10+
// 64kB user script -> using 256kB
11+
#define USER_SCRIPT_LOCATION 0x081C0000
12+
#define USER_SCRIPT_SECTOR FLASH_SECTOR_11
1313
//#define USER_SCRIPT_SIZE (0x10000 - 4)
1414
// #define USER_SCRIPT_SIZE (0x2000 - 4) // 8kB up to v2.1
15-
#define USER_SCRIPT_SIZE (0x4000 - 4) // 16kB v3.0+
15+
#define USER_SCRIPT_SIZE (0x40000 - 4) // 16kB v3.0+
1616

1717
typedef enum { FLASH_Status_Init = 0
1818
, FLASH_Status_Saved = 1

lib/slopes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ typedef struct{
3939
float shaped; // current shaped output voltage
4040
} Slope_t;
4141

42-
#define SLOPE_CHANNELS 4
42+
#define SLOPE_CHANNELS 8
4343

4444
// refactor for dynamic SLOPE_CHANNELS
4545
// refactor for dynamic SAMPLE_RATE

ll/adda.c

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
#include "debug_pin.h"
77
#include "ads131.h"
8-
#include "dac8565.h"
8+
// #include "dac8565.h"
9+
#include "dac108.h"
910

1011
#include "../lib/flash.h" // FLASH_*_t
1112
#include "cal_ll.h" // CAL_LL_Init(),
@@ -28,15 +29,15 @@ static void CAL_ReadFlash( void );
2829

2930
uint16_t ADDA_Init( int adc_timer_ix )
3031
{
31-
ADC_Init( ADDA_BLOCK_SIZE
32-
, ADDA_ADC_CHAN_COUNT
33-
, adc_timer_ix
34-
);
32+
// ADC_Init( ADDA_BLOCK_SIZE
33+
// , ADDA_ADC_CHAN_COUNT
34+
// , adc_timer_ix
35+
// );
3536
DAC_Init( ADDA_BLOCK_SIZE
3637
, ADDA_DAC_CHAN_COUNT
3738
);
38-
CAL_LL_Init();
39-
CAL_ReadFlash();
39+
// CAL_LL_Init();
40+
// CAL_ReadFlash();
4041
return ADDA_BLOCK_SIZE;
4142
}
4243

@@ -45,12 +46,12 @@ void ADDA_Start( void )
4546
DAC_Start();
4647
}
4748

48-
void ADDA_BlockProcess( uint32_t* dac_pickle_ptr )
49+
static IO_block_t b = { .size = ADDA_BLOCK_SIZE };
50+
void ADDA_BlockProcess( uint16_t* dac_pickle_ptr )
4951
{
50-
IO_block_t b = { .size = ADDA_BLOCK_SIZE };
51-
ADC_UnpickleBlock( b.in[0]
52-
, ADDA_BLOCK_SIZE
53-
);
52+
// ADC_UnpickleBlock( b.in[0]
53+
// , ADDA_BLOCK_SIZE
54+
// );
5455
IO_BlockProcess( &b );
5556
DAC_PickleBlock( dac_pickle_ptr
5657
, b.out[0]
@@ -60,16 +61,16 @@ void ADDA_BlockProcess( uint32_t* dac_pickle_ptr )
6061

6162
float ADDA_GetADCValue( uint8_t channel )
6263
{
63-
return ADC_GetValue( channel );
64+
return 0.0;
65+
// return ADC_GetValue( channel );
6466
}
6567

6668
__weak IO_block_t* IO_BlockProcess( IO_block_t* b )
6769
{
6870
for( uint16_t i=0; i<(b->size); i++ ){
69-
b->out[0][i] = b->in[0][i];
70-
b->out[1][i] = b->in[1][i];
71-
b->out[2][i] = 2.0;
72-
b->out[3][i] = 3.0;
71+
for(int j=0; j<8; j++){
72+
b->out[j][i] = 0.0;
73+
}
7374
}
7475
return b;
7576
}
@@ -98,10 +99,10 @@ void CAL_Set( int chan, CAL_Param_t param, float val )
9899
if(chan >= 1 && chan <= 2){ // adc
99100
if(param == CAL_Offset){
100101
cal.adc[chan-1].shift = val;
101-
ADC_CalibrateShift(chan-1, val);
102+
// ADC_CalibrateShift(chan-1, val);
102103
} else {
103104
cal.adc[chan-1].scale = val;
104-
ADC_CalibrateScalar(chan-1, val);
105+
// ADC_CalibrateScalar(chan-1, val);
105106
}
106107
} else if( chan >= 3 && chan <= 6){ // dac
107108
if(param == CAL_Offset){
@@ -145,15 +146,16 @@ static void CAL_ReadFlash( void )
145146
, sizeof(CAL_chan_t) * (2+4)
146147
) ){
147148
for( int j=0; j<2; j++ ){
148-
ADC_CalibrateShift( j, cal.adc[j].shift );
149-
ADC_CalibrateScalar( j, cal.adc[j].scale );
149+
;;
150+
// ADC_CalibrateShift( j, cal.adc[j].shift );
151+
// ADC_CalibrateScalar( j, cal.adc[j].scale );
150152
}
151153
for( int j=0; j<4; j++ ){
152154
DAC_CalibrateOffset( j, cal.dac[j].shift );
153155
DAC_CalibrateScalar( j, cal.dac[j].scale );
154156
}
155157
} else {
156158
printf("not yet calibrated\n");
157-
CAL_Defaults();
159+
// CAL_Defaults();
158160
}
159161
}

ll/dac108.c

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ uint16_t* samples = NULL;
1515

1616
#define DAC_ZERO_VOLTS ((uint16_t)(((uint32_t)0xFFFF * 2)/3))
1717
#define DAC_V_TO_U16 ((float)(65535.0 / 15.0))
18-
#define DAC_CHANNELSS 4
18+
#define DAC_CHANNELSS 8
1919
float dac_calibrated_offset[DAC_CHANNELSS];
2020
float dac_calibrated_scalar[DAC_CHANNELSS];
2121

@@ -26,15 +26,16 @@ void DAC_Init(uint16_t bsize, uint8_t chan_count){
2626
sai_init();
2727

2828
// Create the sample buffer for DMA transfer
29-
samp_count = DAC_BUFFER_COUNT * bsize * chan_count;
30-
samples = malloc( sizeof(uint16_t) * samp_count );
31-
for( int i=0; i<samp_count; i++ ){ samples[i] = 0; } // unnecessary
29+
samp_count = DAC_BUFFER_COUNT * bsize * chan_count; // 512
30+
printf("samp_count %x\n\r", samp_count);
31+
samples = malloc( sizeof(uint16_t) * samp_count ); // 1k
3232
if(samples == NULL){ printf("!DAC_buffer\n"); }
33+
for( int i=0; i<samp_count; i++ ){ samples[i] = 0; } // unnecessary
3334

34-
for( int j=0; j<DAC_CHANNELSS; j++ ){
35-
dac_calibrated_offset[j] = 0.0;
36-
dac_calibrated_scalar[j] = DAC_V_TO_U16;
37-
}
35+
// for( int j=0; j<DAC_CHANNELSS; j++ ){
36+
// dac_calibrated_offset[j] = 0.0;
37+
// dac_calibrated_scalar[j] = DAC_V_TO_U16;
38+
// }
3839
}
3940

4041
void DAC_Start(void){
@@ -132,7 +133,7 @@ static void sai_init(void){
132133
hsai_a.Init.FirstBit = SAI_FIRSTBIT_MSB;
133134
hsai_a.Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; // CONFIRM
134135

135-
hsai_a.FrameInit.FrameLength = 8; // was 33 for 32 vals
136+
hsai_a.FrameInit.FrameLength = 17; // was 33 for 32 vals
136137
hsai_a.FrameInit.ActiveFrameLength = 1; // 1 ?
137138
hsai_a.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
138139
hsai_a.FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH;
@@ -141,9 +142,13 @@ static void sai_init(void){
141142
hsai_a.SlotInit.FirstBitOffset = 0;
142143
hsai_a.SlotInit.SlotSize = SAI_SLOTSIZE_16B;
143144
hsai_a.SlotInit.SlotNumber = 8;
144-
hsai_a.SlotInit.SlotActive = SAI_SLOTACTIVE_ALL;
145+
hsai_a.SlotInit.SlotActive = SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1
146+
| SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3
147+
| SAI_SLOTACTIVE_4 | SAI_SLOTACTIVE_5
148+
| SAI_SLOTACTIVE_6 | SAI_SLOTACTIVE_7;
145149

146150
if(HAL_SAI_Init(&hsai_a)){
151+
printf("sai init failed\n\r");
147152
return;
148153
}
149154

@@ -182,7 +187,7 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai)
182187
hdma_tx_a.Init.Mode = DMA_CIRCULAR;
183188
hdma_tx_a.Init.Priority = DMA_PRIORITY_HIGH;
184189
hdma_tx_a.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
185-
hdma_tx_a.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
190+
hdma_tx_a.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_1QUARTERFULL;
186191
hdma_tx_a.Init.MemBurst = DMA_MBURST_SINGLE;
187192
hdma_tx_a.Init.PeriphBurst = DMA_PBURST_SINGLE;
188193

@@ -199,11 +204,18 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai)
199204
// debug(&debug, "HAL_DMA_Init failed");
200205
return;
201206
}
207+
208+
// Codec request triggers transfer & new frame calc
209+
HAL_NVIC_SetPriority( DMA2_Stream3_IRQn
210+
, DAC_IRQPriority
211+
, 1
212+
);
213+
HAL_NVIC_EnableIRQ( DMA2_Stream3_IRQn );
202214
}
203215

204216
void sai_start_transmit(uint16_t* hwords, uint16_t count){
205217
if(HAL_SAI_Transmit_DMA(&hsai_a, (uint8_t*)hwords, count)){
206-
;
218+
printf("sai transmit fail.\n\r");
207219
}
208220
}
209221

@@ -212,6 +224,9 @@ void sai_start_transmit(uint16_t* hwords, uint16_t count){
212224
// DMA triggered by codec requesting more ADC!
213225
void DMA2_Stream3_IRQHandler(void){
214226
HAL_DMA_IRQHandler(&hdma_tx_a);
227+
if(hdma_tx_a.ErrorCode != HAL_OK){
228+
printf("sai dma err: 0x%0x\n\r", hdma_tx_a.ErrorCode);
229+
}
215230
}
216231

217232
static void callback(int offset){
@@ -222,7 +237,13 @@ static void callback(int offset){
222237
// float out[b_size2];
223238
// codec_to_floats( in, &in[b_size], &inBuff[offset2], b_size );
224239
// FIXME ONLY ONE OF THE NEXT 2 FUNS
240+
225241
ADDA_BlockProcess( samples );
242+
243+
244+
245+
246+
226247
// (*block_process_fn)( out
227248
// , in // treat ins as zeroes (unused)
228249
// , b_size
@@ -233,5 +254,7 @@ static void callback(int offset){
233254

234255
void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai){ callback(0); }
235256
void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai){ callback(1); }
236-
257+
void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai){
258+
printf("sai error 0x%x\n\r", hsai->ErrorCode);
259+
}
237260

ll/dac108.h

Lines changed: 1 addition & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,6 @@
33
#include <stm32f7xx.h>
44
#include "interrupts.h" // DAC_IRQPriority
55

6-
// Defn for I2S
7-
#define I2Sx SPI2
8-
#define I2Sx_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE()
9-
#define I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
10-
#define I2Sx_NSS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
11-
#define I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
12-
#define I2Sx_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
13-
#define I2Sx_NRST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
14-
15-
#define I2Sx_FORCE_RESET() __HAL_RCC_SPI2_FORCE_RESET()
16-
#define I2Sx_RELEASE_RESET() __HAL_RCC_SPI2_RELEASE_RESET()
17-
18-
// Definition for I2Sx Pins
19-
#define I2Sx_NSS_PIN GPIO_PIN_12
20-
#define I2Sx_NSS_GPIO_PORT GPIOB
21-
#define I2Sx_NSS_AF GPIO_AF5_SPI2
22-
#define I2Sx_SCK_PIN GPIO_PIN_13
23-
#define I2Sx_SCK_GPIO_PORT GPIOB
24-
#define I2Sx_SCK_AF GPIO_AF5_SPI2
25-
#define I2Sx_MOSI_PIN GPIO_PIN_15
26-
#define I2Sx_MOSI_GPIO_PORT GPIOB
27-
#define I2Sx_MOSI_AF GPIO_AF5_SPI2
28-
#define I2Sx_NRST_PIN GPIO_PIN_14
29-
#define I2Sx_NRST_GPIO_PORT GPIOB
30-
31-
// Definition for SPId's DMA
32-
#define I2Sx_TX_DMA_CHANNEL DMA_CHANNEL_0
33-
#define I2Sx_TX_DMA_STREAM DMA1_Stream4
34-
35-
// Definition for SPId's NVIC
36-
#define I2Sx_IRQn SPI2_IRQn
37-
#define I2Sx_IRQHandler SPI2_IRQHandler
38-
#define I2Sx_DMA_TX_IRQn DMA1_Stream4_IRQn
39-
#define I2Sx_DMA_TX_IRQHandler DMA1_Stream4_IRQHandler
40-
41-
#define I2Sx_IRQPriority DAC_IRQPriority
42-
#define I2Sx_IRQSubPriority 2
43-
#define I2Sx_DMA_TX_IRQPriority DAC_IRQPriority
44-
#define I2Sx_DMA_TX_IRQSubPriority 1
45-
46-
// dac8565 defines
47-
#define DAC8565_SET_ONE ((uint8_t)0b00010000)
48-
#define DAC8565_PREP_ONE ((uint8_t)0x0)
49-
#define DAC8565_SET_AND_UPDATE ((uint8_t)0b00100000)
50-
#define DAC8565_SET_ALL ((uint8_t)0b00110100)
51-
#define DAC8565_REFRESH_ALL ((uint8_t)0b00110000)
52-
536
void DAC_Init( uint16_t bsize, uint8_t chan_count );
547
void DAC_Start(void);
558

@@ -60,13 +13,6 @@ void DAC_PickleBlock( uint16_t* dac_pickle_ptr
6013
, uint16_t bsize
6114
);
6215

63-
void I2Sx_DMA_TX_IRQHandler(void);
64-
void I2Sx_IRQHandler(void);
65-
66-
void HAL_I2S_TxCpltCallback( I2S_HandleTypeDef *hi2s );
67-
void HAL_I2S_TxHalfCpltCallback( I2S_HandleTypeDef *hi2s );
68-
void HAL_I2S_ErrorCallback( I2S_HandleTypeDef *hi2s );
69-
7016
void DAC_I2S_MspInit(I2S_HandleTypeDef *hi2s);
7117
void DAC_I2S_MspDeInit(I2S_HandleTypeDef *hi2s);
7218

@@ -78,3 +24,4 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai);
7824
void DMA2_Stream3_IRQHandler(void);
7925
void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai);
8026
void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai);
27+
void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai);

0 commit comments

Comments
 (0)