修复凌瞳高帧率版画质噪点问题
        修复延时函数在多中断时可能异常的问题
This commit is contained in:
SEEKFREE_BUDING
2024-03-09 17:58:13 +08:00
parent 9a30f1ec33
commit 146043d92e
115 changed files with 396 additions and 248 deletions

View File

@@ -1,3 +1,6 @@
V3.2.11
<20>޸<EFBFBD><DEB8><EFBFBD>ͫ<EFBFBD><CDAB>֡<EFBFBD>ʰ滭<CAB0><E6BBAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20>޸<EFBFBD><DEB8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6>ж<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
V3.2.10
<20>޸<EFBFBD>spi-wifi<66><69>ʼ<EFBFBD><CABC>ʧ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
<20>޸<EFBFBD>spi-wifi<66><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -115,7 +115,7 @@ void camera_fifo_init (void)
// @return void
// Sample usage: camera_init();
//-------------------------------------------------------------------------------------------------------------------
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size)
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size)
{
uint8 num;
uint8 link_list_num;

View File

@@ -52,7 +52,7 @@ extern uint8 camera_send_image_frame_header[4]; //
void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ѹΪʮ<CEAA><CAAE><EFBFBD><EFBFBD><EFBFBD>ư<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
void camera_fifo_init (void); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> FIFO <20><>ʼ<EFBFBD><CABC>
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint16 image_size); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ<EFBFBD><CABC>
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -79,7 +79,7 @@
#define SCC8660_AUTO_EXP_DEF (0 ) // <20>Զ<EFBFBD><D4B6>ع<EFBFBD> Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [0-1] 0Ϊ<30>ر<EFBFBD>
#define SCC8660_BRIGHT_DEF (500) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֶ<EFBFBD><D6B6>ع<EFBFBD>Ĭ<EFBFBD>ϣ<EFBFBD>300 <20>ֶ<EFBFBD><D6B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ0-65535 <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9>Ƽ<EFBFBD>ֵ<EFBFBD><D6B5>100 <20>Զ<EFBFBD><D4B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Χ0-255
#define SCC8660_FPS_DEF (50 ) // ͼ<><CDBC>֡<EFBFBD><D6A1> Ĭ<>ϣ<EFBFBD>50 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>60 50 30 25<32><35> ʵ<><CAB5>֡<EFBFBD>ʻ<EFBFBD><CABB><EFBFBD>Ҫ<EFBFBD><D2AA>SCC8660_PCLK_DIV<49><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SCC8660_FPS_DEF (60 ) // ͼ<><CDBC>֡<EFBFBD><D6A1> Ĭ<>ϣ<EFBFBD>50 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>60 50 30 25<32><35> ʵ<><CAB5>֡<EFBFBD>ʻ<EFBFBD><CABB><EFBFBD>Ҫ<EFBFBD><D2AA>SCC8660_PCLK_DIV<49><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SCC8660_PCLK_DIV_DEF (2 ) // PCLK<4C><4B>Ƶϵ<C6B5><CFB5> Ĭ<>ϣ<EFBFBD>5 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8>
// <20><>Ƶϵ<C6B5><CFB5>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>PCLKƵ<4B><C6B5>Խ<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>PCLK<4C><4B><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>DVP<56>ӿڵĸ<DAB5><C4B8>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PCLKƵ<4B><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>֡<EFBFBD>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB1A3>Ĭ<EFBFBD>ϡ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPSΪ50֡<30><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pclk<6C><6B>Ƶϵ<C6B5><CFB5>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ5<CEAA><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>Ϊ50*<2A><>1/8<><38>=6.25֡

View File

@@ -54,7 +54,7 @@ IFX_INTERRUPT(stm0_isr, 0, IFX_INTPRIO_STM0_SR0)
stm0_isr_flag = 0;
}
IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0)
IFX_INTERRUPT(stm1_isr, 1, IFX_INTPRIO_STM1_SR0)
{
interrupt_global_enable(0); // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD><C7B6>
IfxStm_clearCompareFlag(&MODULE_STM1, IfxStm_Comparator_0);
@@ -68,6 +68,8 @@ IFX_INTERRUPT(stm1_isr, 0, IFX_INTPRIO_STM1_SR0)
//-------------------------------------------------------------------------------------------------------------------
void system_delay_10ns (uint32 time)
{
uint32 interrupt_global_state;
IfxStm_Index stm_index;
stm_index = (IfxStm_Index)IfxCpu_getCoreId();
@@ -83,15 +85,19 @@ void system_delay_10ns (uint32 time)
case IfxStm_Index_0:
{
Ifx_STM *stm_sfr = &MODULE_STM0;
stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time;
stm0_isr_flag = 1;
interrupt_global_state = interrupt_global_disable(); // <20>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time;
interrupt_global_enable(interrupt_global_state); // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
while(stm0_isr_flag);
}break;
case IfxStm_Index_1:
{
Ifx_STM *stm_sfr = &MODULE_STM1;
stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time;
stm1_isr_flag = 1;
interrupt_global_state = interrupt_global_disable(); // <20>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
stm_sfr->CMP[0].U = stm_sfr->TIM0.U + time;
interrupt_global_enable(interrupt_global_state); // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
while(stm1_isr_flag);
}break;
case IfxStm_Index_none: break;

View File

@@ -41,7 +41,7 @@
typedef struct
{
Ifx_DMA_CH linked_list[8]; // DMA<4D><41><EFBFBD><EFBFBD>
Ifx_DMA_CH linked_list[10]; // DMA<4D><41><EFBFBD><EFBFBD>
IfxDma_Dma_Channel channel; // DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}DMA_LINK;
@@ -67,7 +67,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list;
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint16 dma_count)
uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count)
{
IfxDma_Dma_Channel dmaChn;
@@ -83,7 +83,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
IfxDma_Dma_initChannelConfig(&cfg, &dma);
uint8 list_num, i;
uint16 single_channel_dma_count;
uint32 single_channel_dma_count;
zf_assert(!(dma_count % 8)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8<CEAA>ı<EFBFBD><C4B1><EFBFBD>
@@ -100,7 +100,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
break;
}
list_num++;
if(list_num > 8)
if(list_num > 10)
{
zf_assert(FALSE);
}
@@ -141,7 +141,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr);
cfg.transferCount = single_channel_dma_count;
cfg.transferCount = (uint16)single_channel_dma_count;
IfxDma_Dma_initChannel(&dmaChn, &cfg);
@@ -153,13 +153,13 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i);
if(i == (list_num - 1))
{
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[0]);
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]);
}
else
{
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[i+1]);
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]);
}
cfg.transferCount = single_channel_dma_count;
cfg.transferCount = (uint16)single_channel_dma_count;
IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg);
i++;

View File

@@ -45,7 +45,7 @@
#define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr))))
//====================================================DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================
uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint16 dma_count);
uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count);
void dma_disable (IfxDma_ChannelId dma_ch);
void dma_enable (IfxDma_ChannelId dma_ch);
//====================================================DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================

View File

@@ -24,7 +24,7 @@
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> cpu0_main
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.9.20
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.9.4
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
@@ -40,6 +40,7 @@
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>չ<EFBFBD><D5B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>߲<EFBFBD><DFB2>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>չ<EFBFBD><D5B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>߲<EFBFBD><DFB2>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// **************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ****************************
int core0_main(void)
{
@@ -49,6 +50,7 @@ int core0_main(void)
// <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cpu_wait_event_ready(); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>к<EFBFBD><D0BA>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (TRUE)
@@ -57,11 +59,10 @@ int core0_main(void)
// <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD><D0B4>Ҫѭ<D2AA><D1AD>ִ<EFBFBD>еĴ<D0B5><C4B4><EFBFBD>
}
}
#pragma section all restore
// **************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ****************************