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