diff --git a/Example/1-ADC_Demo/Libraries/doc/version.txt b/Example/1-ADC_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/1-ADC_Demo/Libraries/doc/version.txt +++ b/Example/1-ADC_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/1-ADC_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/1-ADC_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/1-ADC_Demo/USER/isr.c b/Example/1-ADC_Demo/USER/isr.c index 72b40a5..490fd1f 100644 --- a/Example/1-ADC_Demo/USER/isr.c +++ b/Example/1-ADC_Demo/USER/isr.c @@ -22,9 +22,11 @@ #include "isr.h" //在isr.c的中断函数,函数定义的第二个参数固定为0,请不要更改,即使你用CPU1处理中断也不要更改,需要CPU1处理中断只需要在isr_config.h内修改对应的宏定义即可 + //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -32,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -53,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -66,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -78,8 +85,9 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) } //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 -//IFX_INTERRUPT(eru_ch2_ch6_isr, ERU_CH2_CH6_INT_SERVICE, ERU_CH2_CH6_INT_PRIO) +//IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -96,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -114,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -123,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -153,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -169,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/doc/version.txt b/Example/10-Interrupt_Priority_Set_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/doc/version.txt +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/10-Interrupt_Priority_Set_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/10-Interrupt_Priority_Set_Demo/USER/isr.c b/Example/10-Interrupt_Priority_Set_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/10-Interrupt_Priority_Set_Demo/USER/isr.c +++ b/Example/10-Interrupt_Priority_Set_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/11-Systick_Demo/Libraries/doc/version.txt b/Example/11-Systick_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/11-Systick_Demo/Libraries/doc/version.txt +++ b/Example/11-Systick_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/11-Systick_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/11-Systick_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/11-Systick_Demo/USER/isr.c b/Example/11-Systick_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/11-Systick_Demo/USER/isr.c +++ b/Example/11-Systick_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/12-Dual_Core_Demo/Libraries/doc/version.txt b/Example/12-Dual_Core_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/12-Dual_Core_Demo/Libraries/doc/version.txt +++ b/Example/12-Dual_Core_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/12-Dual_Core_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/12-Dual_Core_Demo/USER/isr.c b/Example/12-Dual_Core_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/12-Dual_Core_Demo/USER/isr.c +++ b/Example/12-Dual_Core_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/13-FFT_Demo/Libraries/doc/version.txt b/Example/13-FFT_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/13-FFT_Demo/Libraries/doc/version.txt +++ b/Example/13-FFT_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/13-FFT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/13-FFT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/13-FFT_Demo/USER/isr.c b/Example/13-FFT_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/13-FFT_Demo/USER/isr.c +++ b/Example/13-FFT_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/14-Specifies_Variable_Or_Code_Location_Demo/USER/isr.c b/Example/14-Specifies_Variable_Or_Code_Location_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/14-Specifies_Variable_Or_Code_Location_Demo/USER/isr.c +++ b/Example/14-Specifies_Variable_Or_Code_Location_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/2-LED_Blink_Demo/Libraries/doc/version.txt b/Example/2-LED_Blink_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/2-LED_Blink_Demo/Libraries/doc/version.txt +++ b/Example/2-LED_Blink_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/2-LED_Blink_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/2-LED_Blink_Demo/USER/isr.c b/Example/2-LED_Blink_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/2-LED_Blink_Demo/USER/isr.c +++ b/Example/2-LED_Blink_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/3-PIT_Demo/Libraries/doc/version.txt b/Example/3-PIT_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/3-PIT_Demo/Libraries/doc/version.txt +++ b/Example/3-PIT_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/3-PIT_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/3-PIT_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/3-PIT_Demo/USER/isr.c b/Example/3-PIT_Demo/USER/isr.c index 89a72c2..089f2b5 100644 --- a/Example/3-PIT_Demo/USER/isr.c +++ b/Example/3-PIT_Demo/USER/isr.c @@ -19,7 +19,6 @@ #include "isr_config.h" -#include "stdio.h" #include "isr.h" //在isr.c的中断函数,函数定义的第二个参数固定为0,请不要更改,即使你用CPU1处理中断也不要更改,需要CPU1处理中断只需要在isr_config.h内修改对应的宏定义即可 @@ -28,6 +27,7 @@ uint16 time; IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); time++; printf("pit count: %d\n", time); @@ -36,18 +36,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -57,6 +60,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -70,6 +74,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -84,6 +89,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -100,6 +106,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -118,6 +125,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -127,29 +135,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -157,15 +171,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -173,13 +190,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/4-Encoder_Demo/Libraries/doc/version.txt b/Example/4-Encoder_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/4-Encoder_Demo/Libraries/doc/version.txt +++ b/Example/4-Encoder_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/4-Encoder_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/4-Encoder_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/4-Encoder_Demo/USER/isr.c b/Example/4-Encoder_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/4-Encoder_Demo/USER/isr.c +++ b/Example/4-Encoder_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/5-UART_Demo/Libraries/doc/version.txt b/Example/5-UART_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/5-UART_Demo/Libraries/doc/version.txt +++ b/Example/5-UART_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/5-UART_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/5-UART_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/5-UART_Demo/USER/isr.c b/Example/5-UART_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/5-UART_Demo/USER/isr.c +++ b/Example/5-UART_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/6-Printf_Demo/Libraries/doc/version.txt b/Example/6-Printf_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/6-Printf_Demo/Libraries/doc/version.txt +++ b/Example/6-Printf_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/6-Printf_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/6-Printf_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/6-Printf_Demo/USER/isr.c b/Example/6-Printf_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/6-Printf_Demo/USER/isr.c +++ b/Example/6-Printf_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/doc/version.txt b/Example/7-GPIO_Interrupt_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/doc/version.txt +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/7-GPIO_Interrupt_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/7-GPIO_Interrupt_Demo/USER/isr.c b/Example/7-GPIO_Interrupt_Demo/USER/isr.c index 6025fc9..d0c1a66 100644 --- a/Example/7-GPIO_Interrupt_Demo/USER/isr.c +++ b/Example/7-GPIO_Interrupt_Demo/USER/isr.c @@ -19,31 +19,36 @@ #include "isr_config.h" -#include "stdio.h" #include "isr.h" +//在isr.c的中断函数,函数定义的第二个参数固定为0,请不要更改,即使你用CPU1处理中断也不要更改,需要CPU1处理中断只需要在isr_config.h内修改对应的宏定义即可 + //PIT中断函数 示例 -IFX_INTERRUPT(cc60_pit_ch0_isr, CCU6_0_CH0_INT_SERVICE, CCU6_0_CH0_ISR_PRIORITY) +IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } -IFX_INTERRUPT(cc60_pit_ch1_isr, CCU6_0_CH1_INT_SERVICE, CCU6_0_CH1_ISR_PRIORITY) +IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } -IFX_INTERRUPT(cc61_pit_ch0_isr, CCU6_1_CH0_INT_SERVICE, CCU6_1_CH0_ISR_PRIORITY) +IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } -IFX_INTERRUPT(cc61_pit_ch1_isr, CCU6_1_CH1_INT_SERVICE, CCU6_1_CH1_ISR_PRIORITY) +IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -53,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, CCU6_1_CH1_INT_SERVICE, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, ERU_CH0_CH4_INT_SERVICE, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -68,6 +74,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, ERU_CH0_CH4_INT_SERVICE, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, ERU_CH1_CH5_INT_SERVICE, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -82,8 +89,9 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, ERU_CH1_CH5_INT_SERVICE, ERU_CH1_CH5_INT_PRIO) } //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 -//IFX_INTERRUPT(eru_ch2_ch6_isr, ERU_CH2_CH6_INT_SERVICE, ERU_CH2_CH6_INT_PRIO) +//IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -98,8 +106,9 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, ERU_CH1_CH5_INT_SERVICE, ERU_CH1_CH5_INT_PRIO) -IFX_INTERRUPT(eru_ch3_ch7_isr, ERU_CH3_CH7_INT_SERVICE, ERU_CH3_CH7_INT_PRIO) +IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -116,8 +125,9 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, ERU_CH3_CH7_INT_SERVICE, ERU_CH3_CH7_INT_PRIO) -IFX_INTERRUPT(dma_ch5_isr, ERU_DMA_INT_SERVICE, ERU_DMA_INT_PRIO) +IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -125,61 +135,73 @@ IFX_INTERRUPT(dma_ch5_isr, ERU_DMA_INT_SERVICE, ERU_DMA_INT_PRIO) //串口中断函数 示例 -IFX_INTERRUPT(uart0_tx_isr, UART0_INT_SERVICE, UART0_TX_INT_PRIO) +IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } -IFX_INTERRUPT(uart0_rx_isr, UART0_INT_SERVICE, UART0_RX_INT_PRIO) +IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } -IFX_INTERRUPT(uart0_er_isr, UART0_INT_SERVICE, UART0_ER_INT_PRIO) +IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 -IFX_INTERRUPT(uart1_tx_isr, UART1_INT_SERVICE, UART1_TX_INT_PRIO) +IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } -IFX_INTERRUPT(uart1_rx_isr, UART1_INT_SERVICE, UART1_RX_INT_PRIO) +IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } -IFX_INTERRUPT(uart1_er_isr, UART1_INT_SERVICE, UART1_ER_INT_PRIO) +IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } //串口2默认连接到无线转串口模块 -IFX_INTERRUPT(uart2_tx_isr, UART2_INT_SERVICE, UART2_TX_INT_PRIO) +IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } -IFX_INTERRUPT(uart2_rx_isr, UART2_INT_SERVICE, UART2_RX_INT_PRIO) +IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } -IFX_INTERRUPT(uart2_er_isr, UART2_INT_SERVICE, UART2_ER_INT_PRIO) +IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } -IFX_INTERRUPT(uart3_tx_isr, UART3_INT_SERVICE, UART3_TX_INT_PRIO) +IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } -IFX_INTERRUPT(uart3_rx_isr, UART3_INT_SERVICE, UART3_RX_INT_PRIO) +IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } -IFX_INTERRUPT(uart3_er_isr, UART3_INT_SERVICE, UART3_ER_INT_PRIO) +IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/8-EEPROM_Demo/Libraries/doc/version.txt b/Example/8-EEPROM_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/8-EEPROM_Demo/Libraries/doc/version.txt +++ b/Example/8-EEPROM_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/8-EEPROM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/8-EEPROM_Demo/USER/isr.c b/Example/8-EEPROM_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/8-EEPROM_Demo/USER/isr.c +++ b/Example/8-EEPROM_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Example/9-PWM_Demo/Libraries/doc/version.txt b/Example/9-PWM_Demo/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Example/9-PWM_Demo/Libraries/doc/version.txt +++ b/Example/9-PWM_Demo/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eeprom.c b/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eeprom.c index a4e1792..8e5cddd 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eeprom.c +++ b/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eeprom.c @@ -49,7 +49,7 @@ uint8 flash_check(uint32 sector_num, uint32 page_num) // @param sector_num 需要写入的扇区编号 参数范围0-11 // @return void // @since v1.0 -// Sample usage: flash_erase_sector(0); +// Sample usage: eeprom_erase_sector(0); //------------------------------------------------------------------------------------------------------------------- void eeprom_erase_sector(uint32 sector_num) { diff --git a/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c b/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Example/9-PWM_Demo/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Example/9-PWM_Demo/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Example/9-PWM_Demo/USER/Cpu0_Main.c b/Example/9-PWM_Demo/USER/Cpu0_Main.c index 2b58f04..f3fd2e7 100644 --- a/Example/9-PWM_Demo/USER/Cpu0_Main.c +++ b/Example/9-PWM_Demo/USER/Cpu0_Main.c @@ -21,7 +21,6 @@ #include "headfile.h" #pragma section all "cpu0_dsram" -uint16 adc_result; int core0_main(void) { @@ -50,4 +49,4 @@ int core0_main(void) } } -#pragma section all restore \ No newline at end of file +#pragma section all restore diff --git a/Example/9-PWM_Demo/USER/isr.c b/Example/9-PWM_Demo/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Example/9-PWM_Demo/USER/isr.c +++ b/Example/9-PWM_Demo/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Seekfree_TC264_Opensource_Library/.cproject b/Seekfree_TC264_Opensource_Library/.cproject index 311d388..80c5022 100644 --- a/Seekfree_TC264_Opensource_Library/.cproject +++ b/Seekfree_TC264_Opensource_Library/.cproject @@ -191,11 +191,7 @@ - TASKING VX-toolset for TriCore: control program v6.3r1 Build 19041558 - TASKING VX-toolset for TriCore: object linker v6.3r1 Build 19041558 - TASKING VX-toolset for TriCore: assembler v6.3r1 Build 19041558 TASKING program builder v6.3r1 Build 19041558 - TASKING VX-toolset for TriCore: C compiler v6.3r1 Build 19041558 diff --git a/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt index 1fdbd92..a6f7958 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/Libraries/doc/version.txt @@ -64,4 +64,13 @@ V1.0.8 修复CCU61 通道1中断设置错误的问题 修复CCU6在线调试的时候定时器不能自动停止,导致在线调试时持续进中断的问题 对CCU6增加pit_close与pit_start函数用于控制定时器的开始与停止 - 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 \ No newline at end of file + 对CCU6增加pit_disable_interrupt与pit_enable_interrupt函数用于控制中断开关 + +V1.0.9 + 修改RDA5807驱动文件,主要保证上电后1S在操作FM模块 + +V1.1.0 + 对ISR文件内的中断函数全部添加enableInterrupts(); 以实现中断嵌套的功能 + 增加RDA5807获取RSSI功能函数 + 对DMA连接传输所用到的变量,根据ERU_DMA_INT_SERVICE来将变量放到对应的CPU中 + \ No newline at end of file diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_libraries/zf_eru_dma.c b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_libraries/zf_eru_dma.c index 86c0158..9bfc82f 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_libraries/zf_eru_dma.c +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_libraries/zf_eru_dma.c @@ -31,9 +31,18 @@ typedef struct IfxDma_Dma_Channel channel; //DMA通道句柄 }DMA_LINK; - +#if(0 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu0_dsram" DMA_LINK dma_link_list; +#elif(1 == ERU_DMA_INT_SERVICE) +#pragma section all "cpu1_dsram" +DMA_LINK dma_link_list; + +#endif +#pragma section all restore + + //------------------------------------------------------------------------------------------------------------------- // @brief eru触发dma初始化 // @param dma_ch 选择DMA通道 diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.c b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.c index f56a41a..ab0356a 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.c +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.c @@ -50,7 +50,7 @@ uint8 IIC_num; // -static uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 +uint16 simiic_delay_time = SIMIIC_DELAY_TIME; //ICM等传感器应设置为20 //------------------------------------------------------------------------------------------------------------------- diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.h b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.h index 6a9c1e3..1a0c4e2 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.h +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_IIC.h @@ -41,13 +41,13 @@ #define SIMIIC_DELAY_TIME 20 -typedef enum IIC //DAC模块 +typedef enum IIC //IIC类型枚举 { SIMIIC, SCCB } IIC_type; - +extern uint16 simiic_delay_time; //ICM等传感器应设置为20 void simiic_delay_set(uint16 time); void simiic_start(void); diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c index a6f9a29..e1f7aca 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_MT9V03X.c @@ -357,7 +357,6 @@ void mt9v03x_dma(void) mt9v03x_dma_int_num = 0; mt9v03x_finish_flag = 1;//一副图像从采集开始到采集结束耗时3.8MS左右(50FPS、188*120分辨率) dma_stop(MT9V03X_DMA_CH); - } } diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c index 1640b41..3c44e3e 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.c @@ -43,7 +43,7 @@ #define FM_ADDRESS 0x20>>1 uint8 rda5807_config_reg[] = { - 0xc1, 0x03, // Register 0x2 + 0xc0, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 @@ -63,6 +63,12 @@ uint8 rda5807_config_reg[] = { void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) { uint8 i; + + uint16 temp_delay_time = 0; + + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x00); //发送器件地址加写位 @@ -70,6 +76,8 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) send_ch(data[i]); //发送需要写入的数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -84,6 +92,11 @@ void rad5807m_simiic_write(uint8 dev_add, uint8 data[], uint8 num) //------------------------------------------------------------------------------------------------------------------- void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) { + + uint16 temp_delay_time = 0; + temp_delay_time = simiic_delay_time; + simiic_delay_set(RAD5807_DELAY_TIME);//设置模拟IIC延时,因为默认速率较高 + simiic_start(); send_ch( (dev_add<<1) | 0x01); //发送器件地址加读位 @@ -96,6 +109,8 @@ void rda5807m_simiic_read(uint8 dev_add,uint8 *dat_add,uint8 num) *dat_add = read_ch(no_ack); //读取数据 simiic_stop(); + + simiic_delay_set(temp_delay_time); //还原模拟IIC默认速率 } @@ -176,7 +191,22 @@ void rda5807_read_id(void) rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); } +//------------------------------------------------------------------------------------------------------------------- +// @brief rda5807读取RSSI(信号强度) +// @param NULL +// @return void +// @since v1.0 +// Sample usage: +//------------------------------------------------------------------------------------------------------------------- +uint8 rda5807_read_rssi(void) +{ + uint8 rssi; + rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,3); + rssi = rda5807_read_reg[2] >> 1; + + return rssi; +} //------------------------------------------------------------------------------------------------------------------- // @brief rda5807初始化 @@ -192,19 +222,20 @@ void rda5807_init(float freq) //iic初始化 simiic_init(); - simiic_delay_set(100);//设置模拟IIC延时,因为默认速率较高 - //复位 - rad5807m_simiic_write(FM_ADDRESS,dat,2); - systick_delay_ms(STM0, 50); + systick_delay_ms(STM0, 1000);//需要保证上电后1S在操作 FM模块 while(rda5807_read_reg[8] != 0x58) { + //复位 + rad5807m_simiic_write(FM_ADDRESS,dat,2); + systick_delay_ms(STM0, 10); //读取寄存器,自检。 rda5807m_simiic_read(FM_ADDRESS,rda5807_read_reg,10); - systick_delay_ms(STM0, 50); //如果一直卡在这里,查看SCL和SDA是否连接好。 - //需要设置SEEKFREE_IIC.h文件中的SIMIIC_DELAY_TIME值大于60 + //也可以尝试 适当增加5807.h文件中的RAD5807_DELAY_TIME宏定义的数值 + //如果SDA SCL没有串联电阻(不是上下拉哦)则可以尝试修改底层库文件 + //将gpio_init函数中的IfxPort_PadDriver_cmosAutomotiveSpeed1改为IfxPort_PadDriver_cmosAutomotiveSpeed4 } //启动 @@ -212,7 +243,7 @@ void rda5807_init(float freq) //频率设置 rda5807_set_channel(freq); - simiic_delay_set(SIMIIC_DELAY_TIME);//还原模拟IIC默认速率 + } diff --git a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h index 08801d0..9cfc01e 100644 --- a/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h +++ b/Seekfree_TC264_Opensource_Library/Libraries/seekfree_peripheral/SEEKFREE_RDA5807.h @@ -40,8 +40,7 @@ - - +#define RAD5807_DELAY_TIME 200 void rda5807_init(float freq); @@ -49,6 +48,7 @@ void rda5807_set_transimt(void); void rda5807_set_idle(void); void rda5807_set_channel(float freq); void rda5807_channel_config(uint16 reg_chn); +uint8 rda5807_read_rssi(void); #endif diff --git a/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c b/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c index 3c292a7..3e33cd7 100644 --- a/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c +++ b/Seekfree_TC264_Opensource_Library/USER/Cpu0_Main.c @@ -28,17 +28,20 @@ //然后在右侧的窗口中找到C/C++ Compiler->Optimization->Optimization level处设置优化等级 //一般默认新建立的工程都会默认开2级优化,因此大家也可以设置为2级优化 - +//对于TC系列默认是不支持中断嵌套的,希望支持中断嵌套需要在中断内使用enableInterrupts();来开启中断嵌套 +//简单点说实际上进入中断后TC系列的硬件自动调用了disableInterrupts();来拒绝响应任何的中断,因为需要我们自己手动调用enableInterrupts();来开启中断的响应。 int core0_main(void) { get_clk();//获取时钟频率 务必保留 + //用户在此处调用各种初始化函数等 enableInterrupts(); while (TRUE) { //用户在此处编写任务代码 + } } diff --git a/Seekfree_TC264_Opensource_Library/USER/Cpu1_Main.c b/Seekfree_TC264_Opensource_Library/USER/Cpu1_Main.c index 8e7e770..ca22406 100644 --- a/Seekfree_TC264_Opensource_Library/USER/Cpu1_Main.c +++ b/Seekfree_TC264_Opensource_Library/USER/Cpu1_Main.c @@ -33,7 +33,6 @@ void core1_main(void) while (TRUE) { //用户在此处编写任务代码 - } } diff --git a/Seekfree_TC264_Opensource_Library/USER/isr.c b/Seekfree_TC264_Opensource_Library/USER/isr.c index bc0dca7..490fd1f 100644 --- a/Seekfree_TC264_Opensource_Library/USER/isr.c +++ b/Seekfree_TC264_Opensource_Library/USER/isr.c @@ -26,6 +26,7 @@ //PIT中断函数 示例 IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH0); } @@ -33,18 +34,21 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_0, PIT_CH1); } IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH0); } IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) { + enableInterrupts();//开启中断嵌套 PIT_CLEAR_FLAG(CCU6_1, PIT_CH1); } @@ -54,6 +58,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH0_REQ4_P10_7))//通道0中断 { CLEAR_GPIO_FLAG(ERU_CH0_REQ4_P10_7); @@ -67,6 +72,7 @@ IFX_INTERRUPT(eru_ch0_ch4_isr, 0, ERU_CH0_CH4_INT_PRIO) IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH1_REQ5_P10_8))//通道1中断 { CLEAR_GPIO_FLAG(ERU_CH1_REQ5_P10_8); @@ -81,6 +87,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) //由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 //IFX_INTERRUPT(eru_ch2_ch6_isr, 0, ERU_CH2_CH6_INT_PRIO) //{ +// enableInterrupts();//开启中断嵌套 // if(GET_GPIO_FLAG(ERU_CH2_REQ7_P00_4))//通道2中断 // { // CLEAR_GPIO_FLAG(ERU_CH2_REQ7_P00_4); @@ -97,6 +104,7 @@ IFX_INTERRUPT(eru_ch1_ch5_isr, 0, ERU_CH1_CH5_INT_PRIO) IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if(GET_GPIO_FLAG(ERU_CH3_REQ6_P02_0))//通道3中断 { CLEAR_GPIO_FLAG(ERU_CH3_REQ6_P02_0); @@ -115,6 +123,7 @@ IFX_INTERRUPT(eru_ch3_ch7_isr, 0, ERU_CH3_CH7_INT_PRIO) IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) { + enableInterrupts();//开启中断嵌套 if (1 == camera_type) mt9v03x_dma(); else if (3 == camera_type) ov7725_dma(); @@ -124,29 +133,35 @@ IFX_INTERRUPT(dma_ch5_isr, 0, ERU_DMA_INT_PRIO) //串口中断函数 示例 IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart0_handle); } IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart0_handle); } IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart0_handle); } //串口1默认连接到摄像头配置串口 IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart1_handle); } IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart1_handle); mt9v03x_uart_callback(); } IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart1_handle); } @@ -154,15 +169,18 @@ IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO) //串口2默认连接到无线转串口模块 IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart2_handle); } IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart2_handle); wireless_uart_callback(); } IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart2_handle); } @@ -170,13 +188,16 @@ IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO) IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrTransmit(&uart3_handle); } IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrReceive(&uart3_handle); } IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO) { + enableInterrupts();//开启中断嵌套 IfxAsclin_Asc_isrError(&uart3_handle); } diff --git a/Seekfree_TC264_Opensource_Library/灏介噺涓嶈浣跨敤鐨勫紩鑴.txt b/Seekfree_TC264_Opensource_Library/灏介噺涓嶈浣跨敤鐨勫紩鑴.txt new file mode 100644 index 0000000..ca712ca --- /dev/null +++ b/Seekfree_TC264_Opensource_Library/灏介噺涓嶈浣跨敤鐨勫紩鑴.txt @@ -0,0 +1,10 @@ + +尽量不要使用以下引脚,以下引脚属于boot引脚,不合理的使用容易导致单片机无法启动等问题, +因此建议大家尽量不要使用。 +P14.2 +P14.3 +P14.4 +P14.5 +P14.6 +P10.5 +P10.6 \ No newline at end of file diff --git a/Seekfree_TC264_Opensource_Library/鎺ㄨ崘IO鍒嗛厤.txt b/Seekfree_TC264_Opensource_Library/鎺ㄨ崘IO鍒嗛厤.txt index befac41..16df2d5 100644 --- a/Seekfree_TC264_Opensource_Library/鎺ㄨ崘IO鍒嗛厤.txt +++ b/Seekfree_TC264_Opensource_Library/鎺ㄨ崘IO鍒嗛厤.txt @@ -33,4 +33,15 @@ TFT DC 15_0 SPI2 -舵机 P33_9 \ No newline at end of file +舵机 P33_9 + + +尽量不要使用以下引脚,以下引脚属于boot引脚,不合理的使用容易导致单片机无法启动等问题, +因此建议大家尽量不要使用。 +P14_2 +P14_3 +P14_4 +P14_5 +P14_6 +P10_5 +P10_6 \ No newline at end of file