Finished getting data from the sensor camera.
This commit is contained in:
		
					parent
					
						
							
								256cd3c500
							
						
					
				
			
			
				commit
				
					
						98c5793738
					
				
			
		
					 2 changed files with 112 additions and 15 deletions
				
			
		
							
								
								
									
										122
									
								
								Src/main.c
									
										
									
									
									
								
							
							
						
						
									
										122
									
								
								Src/main.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -63,17 +63,15 @@ static void MX_NVIC_Init(void);
 | 
			
		|||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
volatile ArrayResgiters array_part = data_top_reg;
 | 
			
		||||
#define LINE_SIZE 32
 | 
			
		||||
#define BLK_SIZE 128
 | 
			
		||||
#define SENSOR_SIZE 1024
 | 
			
		||||
 | 
			
		||||
volatile ArrayPart array_part = top_mat;
 | 
			
		||||
volatile StepArrayRetrieve block_step = top_block_0;
 | 
			
		||||
const uint8_t part_half_array = 256;
 | 
			
		||||
const uint8_t ptat_num = 1;
 | 
			
		||||
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 };
 | 
			
		||||
uint16_t tmp_blk0[BLK_SIZE + 1] = { 0 };
 | 
			
		||||
uint16_t tmp_blk1[BLK_SIZE + 1] = { 0 };
 | 
			
		||||
uint16_t complete_array[SENSOR_SIZE] = { 0 };
 | 
			
		||||
 | 
			
		||||
void configure_sensor() {
 | 
			
		||||
    uint8_t data = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -110,38 +108,132 @@ void configure_sensor() {
 | 
			
		|||
    HAL_Delay(6);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int8_t blk_offset_start(const StepArrayRetrieve blk_step) {
 | 
			
		||||
    switch (blk_step) {
 | 
			
		||||
        case top_block_0:
 | 
			
		||||
            return 0;
 | 
			
		||||
        case top_block_1:
 | 
			
		||||
            return 1;
 | 
			
		||||
        case top_block_2:
 | 
			
		||||
            return 2;
 | 
			
		||||
        case top_block_3:
 | 
			
		||||
            return 3;
 | 
			
		||||
        case bot_block_0:
 | 
			
		||||
            return 31;
 | 
			
		||||
        case bot_block_1:
 | 
			
		||||
            return 30;
 | 
			
		||||
        case bot_block_2:
 | 
			
		||||
            return 29;
 | 
			
		||||
        case bot_block_3:
 | 
			
		||||
            return 28;
 | 
			
		||||
        default:
 | 
			
		||||
            return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void copy_line(const uint16_t *restrict const blk, const int8_t j, const int8_t count) {
 | 
			
		||||
    for (int8_t i = 0; i < LINE_SIZE; ++i) {
 | 
			
		||||
        complete_array[j * LINE_SIZE + i] = blk[count * LINE_SIZE + i];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void transfer_blk_to_array(const uint16_t *restrict const blk,
 | 
			
		||||
                           const ArrayPart top_bot,
 | 
			
		||||
                           const StepArrayRetrieve blk_step
 | 
			
		||||
) {
 | 
			
		||||
    const int8_t offset = blk_offset_start(blk_step);
 | 
			
		||||
    switch (top_bot) {
 | 
			
		||||
        case top_mat:
 | 
			
		||||
            for (int8_t j = offset, count = 0; count < 4; j += 4, ++count) {
 | 
			
		||||
                copy_line(blk, j, count);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case bot_mat:
 | 
			
		||||
            for (int8_t j = offset, count = 0; count < 4; j -= 4, ++count) {
 | 
			
		||||
                copy_line(blk, j, count);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
                cam_blk_1 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) top_blk0,
 | 
			
		||||
                sizeof(top_blk0) * sizeof(uint16_t));
 | 
			
		||||
                (uint8_t *) tmp_blk1,
 | 
			
		||||
                sizeof(tmp_blk1) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk0, top_mat, top_block_0);
 | 
			
		||||
            break;
 | 
			
		||||
        case top_block_1:
 | 
			
		||||
            block_step = top_block_2;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_2 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk0,
 | 
			
		||||
                sizeof(tmp_blk0) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk1, top_mat, top_block_1);
 | 
			
		||||
            break;
 | 
			
		||||
        case top_block_2:
 | 
			
		||||
            block_step = top_block_3;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_3 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk1,
 | 
			
		||||
                sizeof(tmp_blk1) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk0, top_mat, top_block_2);
 | 
			
		||||
            break;
 | 
			
		||||
        case top_block_3:
 | 
			
		||||
            block_step = bot_block_0;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_0 | data_bot_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk0,
 | 
			
		||||
                sizeof(tmp_blk0) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk1, top_mat, top_block_3);
 | 
			
		||||
            break;
 | 
			
		||||
        case bot_block_0:
 | 
			
		||||
            block_step = bot_block_1;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_1 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk1,
 | 
			
		||||
                sizeof(tmp_blk1) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk0, bot_mat, bot_block_0);
 | 
			
		||||
            break;
 | 
			
		||||
        case bot_block_1:
 | 
			
		||||
            block_step = bot_block_2;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_2 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk0,
 | 
			
		||||
                sizeof(tmp_blk0) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk1, bot_mat, bot_block_1);
 | 
			
		||||
            break;
 | 
			
		||||
        case bot_block_2:
 | 
			
		||||
            block_step = bot_block_3;
 | 
			
		||||
            HAL_I2C_Mem_Read_IT(&hi2c1,
 | 
			
		||||
                sensor_addr,
 | 
			
		||||
                cam_blk_3 | data_top_reg | start_get_mat,
 | 
			
		||||
                1,
 | 
			
		||||
                (uint8_t *) tmp_blk1,
 | 
			
		||||
                sizeof(tmp_blk1) * sizeof(uint16_t));
 | 
			
		||||
            transfer_blk_to_array(tmp_blk0, top_mat, top_block_2);
 | 
			
		||||
            break;
 | 
			
		||||
        case bot_block_3:
 | 
			
		||||
            block_step = stop;
 | 
			
		||||
            transfer_blk_to_array(tmp_blk1, bot_mat, bot_block_3);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            block_step = stop;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -190,8 +282,8 @@ int main(void) {
 | 
			
		|||
        sensor_addr,
 | 
			
		||||
        data_top_reg,
 | 
			
		||||
        1,
 | 
			
		||||
        (uint8_t *) &top_blk0,
 | 
			
		||||
        part_half_array * sizeof(uint16_t),
 | 
			
		||||
        (uint8_t *) &tmp_blk0,
 | 
			
		||||
        sizeof(tmp_blk0) * sizeof(uint16_t),
 | 
			
		||||
        5);
 | 
			
		||||
    /* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue