WIP getting data with interrupts

This commit is contained in:
Pcornat 2025-02-13 23:58:34 +01:00
parent b35c7ceb72
commit 256cd3c500
Signed by: Pcornat
GPG key ID: E0326CC678A00BDD
2 changed files with 73 additions and 14 deletions

View file

@ -16,8 +16,31 @@ typedef enum {
bpa_trim_top_reg = 0x07, bpa_trim_top_reg = 0x07,
bpa_trim_bot_reg = 0x08, bpa_trim_bot_reg = 0x08,
pu_reg = 0x09, pu_reg = 0x09,
data_top_reg = 0x0A,
data_bot_reg = 0x0B,
} SensorRegisters; } SensorRegisters;
typedef enum {
top_block_0 = 0,
top_block_1,
top_block_2,
top_block_3,
bot_block_0,
bot_block_1,
bot_block_2,
bot_block_3,
stop
} StepArrayRetrieve;
typedef enum {
cam_blk_0 = 0,
cam_blk_1 = 1 << 4,
cam_blk_2 = 2 << 4,
cam_blk_3 = 3 << 4,
} SensorBlockValue;
typedef enum {
data_top_reg = 0x0A,
data_bot_reg = 0x0B,
start_get_mat = 1 << 3 | 1
} ArrayResgiters;
#endif //SENSOR_REGISTERS_H #endif //SENSOR_REGISTERS_H

View file

@ -63,11 +63,17 @@ static void MX_NVIC_Init(void);
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
typedef struct config_s { volatile ArrayResgiters array_part = data_top_reg;
const uint8_t address; volatile StepArrayRetrieve block_step = top_block_0;
const uint8_t write_read; const uint8_t part_half_array = 256;
uint8_t command[2]; const uint8_t ptat_num = 1;
} Config; const uint8_t total_array_size = 1024;
uint16_t top_blk0[part_half_array + ptat_num] = { 0 };
uint16_t top_blk1[part_half_array + ptat_num] = { 0 };
uint16_t top_blk2[part_half_array + ptat_num] = { 0 };
uint16_t top_blk3[part_half_array + ptat_num] = { 0 };
uint16_t bot_blk0[part_half_array + ptat_num] = { 0 };
uint16_t complete_array[total_array_size] = { 0 };
void configure_sensor() { void configure_sensor() {
uint8_t data = 1; uint8_t data = 1;
@ -104,7 +110,41 @@ void configure_sensor() {
HAL_Delay(6); HAL_Delay(6);
} }
// void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {} void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {
switch (block_step) {
case top_block_0:
block_step = top_block_1;
HAL_I2C_Mem_Read_IT(&hi2c1,
sensor_addr,
data_top_reg | start_get_mat,
1,
(uint8_t *) top_blk0,
sizeof(top_blk0) * sizeof(uint16_t));
break;
case top_block_1:
block_step = top_block_2;
break;
case top_block_2:
block_step = top_block_3;
break;
case top_block_3:
block_step = bot_block_0;
break;
case bot_block_0:
block_step = bot_block_1;
break;
case bot_block_1:
block_step = bot_block_2;
break;
case bot_block_2:
block_step = bot_block_3;
break;
case bot_block_3:
break;
default:
break;
}
}
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -114,11 +154,7 @@ void configure_sensor() {
*/ */
int main(void) { int main(void) {
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
const uint8_t part_half_array = 256;
const uint8_t ptat_num = 1;
const uint8_t total_array_size = 1024;
uint_fast16_t top_half[part_half_array + ptat_num] = { 0 };
uint_fast16_t complete_array[total_array_size] = { 0 };
/* USER CODE END 1 */ /* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/ /* MCU Configuration--------------------------------------------------------*/
@ -154,7 +190,7 @@ int main(void) {
sensor_addr, sensor_addr,
data_top_reg, data_top_reg,
1, 1,
(uint8_t *) &top_half, (uint8_t *) &top_blk0,
part_half_array * sizeof(uint16_t), part_half_array * sizeof(uint16_t),
5); 5);
/* USER CODE END 2 */ /* USER CODE END 2 */