你好,在官网上下载的SDK中未找到对应的使用示例,有无FR8008GP的RTC使用例程?
DSG 发布的帖子
-
RE: 串口使用DMA接收不定长数据时,第一次接收的数据没有进入中断发布在 FR800x
你好,就是参考这个文档来配置的,发现还有一个问题,将fifo设置为1/4触发时,串口接收到的数据长度是4的倍数时,就无法触发超时中断,这个该怎么解决。
-
串口使用DMA接收不定长数据时,第一次接收的数据没有进入中断发布在 FR800x
串口使用DMA接收不定长数据时,使用串口第一次发送数据后,若短时间内没收到回复数据,第一次的数据会跟着第二次的数据一起出来,通过日志打印,发现是第一次接收的数据未进入中断处理函数,以下是我的串口部分相关代码,麻烦帮忙看下是哪里的问题
void Uart1Init(void)
{
__SYSTEM_UART1_CLK_ENABLE();GPIO_InitTypeDef GPIO_Handle = {0}; /* init GPIO Alternate Function */ GPIO_Handle.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_Handle.Mode = GPIO_MODE_AF_PP; GPIO_Handle.Pull = GPIO_PULLUP; GPIO_Handle.Alternate = GPIO_FUNCTION_5; gpio_init(GPIO_A, &GPIO_Handle); /* init uart1 */ Uart1_handle.UARTx = Uart1; Uart1_handle.Init.BaudRate = 115200; Uart1_handle.Init.DataLength = UART_DATA_LENGTH_8BIT; Uart1_handle.Init.StopBits = UART_STOPBITS_1; Uart1_handle.Init.Parity = UART_PARITY_NONE; Uart1_handle.Init.FIFO_Mode = UART_FIFO_ENABLE; uart_init_ex(&Uart1_handle); __UART_INT_RX_ENABLE(Uart1_handle.UARTx); NVIC_EnableIRQ(UART1_IRQn); /* init uart1 rx DMA */ DMA_Chan2.Channel = DMA_Channel2; DMA_Chan2.Init.Data_Flow = DMA_P2M_DMAC; DMA_Chan2.Init.Request_ID = 3; DMA_Chan2.Init.Source_Inc = DMA_ADDR_INC_NO_CHANGE; DMA_Chan2.Init.Desination_Inc = DMA_ADDR_INC_INC; DMA_Chan2.Init.Source_Width = DMA_TRANSFER_WIDTH_8; DMA_Chan2.Init.Desination_Width = DMA_TRANSFER_WIDTH_8; dma_init(&DMA_Chan2); __SYSTEM_DMA_CLK_ENABLE(); NVIC_EnableIRQ(DMA_IRQn); uart_receive_DMA(&Uart1_handle); __UART_RxFIFO_THRESHOLD((&Uart1_handle), 1);//Set RxFIFO 1/4 full dma_start(&DMA_Chan2, (uint32_t)&Uart1_handle.UARTx->DATA_DLL.DATA,(uint32_t)Checkbuf, 200, DMA_BURST_LEN_4, DMA_BURST_LEN_1);}
void DMA_disable(DMA_HandleTypeDef hdma)
{
/ Disable the channel /
DMA->Misc_Reg.ChEnReg = (DMA->Misc_Reg.ChEnReg&(~(1 << hdma->Channel))) | (1 << (hdma->Channel + 8));
/ Clear Transfer complete status /
dma_clear_tfr_Status(hdma->Channel);
/ channel Transfer complete interrupt disable */
dma_tfr_interrupt_disable(hdma->Channel);
}
attribute((section("ram_code"))) void uart1_isr(void)
{
uint32_t isr_id;volatile struct_UART_t * const uart_reg_ram = (volatile struct_UART_t *)UART1_BASE; isr_id = __UART_INT_GET_ID(Uart1_handle.UARTx); if((isr_id & 0x0f) == 0x0c) { if(dma_recv_idx == 0) { dma_recv_idx = DMA->Channels[DMA_Chan2.Channel].CTL2.BLOCK_TS; co_printf("dma_recv_idx:%d\r\n",dma_recv_idx); } while(uart_reg_ram->LSR.LSR_BIT.DR) { Checkbuf[dma_recv_idx++] = (uint8_t)uart_reg_ram->DATA_DLL.DATA; } recv_done= 1; }}
主循环中
while(1)
{
if(recv_done)
{
recv_done = 0;
DMA_disable(&DMA_Chan2);
dma_start(&DMA_Chan2, (uint32_t)&Uart1_handle.UARTx->DATA_DLL.DATA,(uint32_t)Checkbuf, 200, DMA_BURST_LEN_4, DMA_BURST_LEN_1);
co_printf("recv done:%d\r\n",dma_recv_idx);
show_reg(Checkbuf,dma_recv_idx,1);
dma_recv_idx = 0;
}
} -
RE: 关于FR8008GP FLASH读写问题发布在 FR800x
@zr pmu_sub_init();会影响很大吗,我对比了一下,现在就这个函数里面的代码不一样,我用的之前sdk版本的,用参考示例里面的就没问题
-
RE: 关于FR8008GP FLASH读写问题发布在 FR800x
@zr attribute((section("ram_code"))) void FlashFuncTest(void);是这样定义吗,试了一下还是不行
-
RE: 关于FR8008GP FLASH读写问题发布在 FR800x
@zr 将FLASH_ADDR改为0x15E000,读出来的与写入的还是不一致
const struct jump_table_image_t _jump_table_image attribute((section("jump_table_1"))) =
{
.image_type = IMAGE_TYPE_APP,
.image_size = 0x19000 * 6,
};程序中image_size是600kb,加上b区域的600kb,再加上a和b区域固件信息的两个4kb,这些是1208kb,我的偏移地址对应的是1400kb,这样理解对吗?现在按照这个地址分配写入与读取的数据还是不一致,调用flash_read函数读取返回值与变量定义是的0xf一致,这个是什么问题 -
关于FR8008GP FLASH读写问题发布在 FR800x
参照论坛中的方法已经对app_config.h文件进行了修改
*// <h> FLASH Configuration
// <o> FLASH_CAPACITY
// <i> Internal Flash capacity selection, Default: 4Mb
// <0x01000000=> 8Mb
// <0x00080000=> 4Mb
// <0x00040000=> 2Mb#define FLASH_CAPACITY 0x01000000
#if FLASH_CAPACITY == 0x00080000
#define BLE_STACK_KEY_STORAGE_OFFSET 0x7F000
#define BLE_BONDING_INFO_SAVE_ADDR 0x7D000
#define BLE_REMOTE_SERVICE_SAVE_ADDR 0x7E000
#elif FLASH_CAPACITY == 0x00040000
#define BLE_STACK_KEY_STORAGE_OFFSET 0x3F000
#define BLE_BONDING_INFO_SAVE_ADDR 0x3D000
#define BLE_REMOTE_SERVICE_SAVE_ADDR 0x3E000
#elif FLASH_CAPACITY == 0x01000000
#define BLE_STACK_KEY_STORAGE_OFFSET 0xFFF000
#define BLE_BONDING_INFO_SAVE_ADDR 0xFFD000
#define BLE_REMOTE_SERVICE_SAVE_ADDR 0xFFE000
#else
#error "flash capacity configuration error!"
#endif //FOR_2M_FLASH*
flash测试代码如下
*#define FLASH_ADDR (0x10021000)
#define FLASH_SECTOR_SIZE (0x100)
#define FLASH_WRITE_LEN (0x100)
void FlashFuncTest(void)
{
co_printf("FLASH FUNC TEST\r\n");
uint8_t read_retu_num=0xf,erase_retu_num=0xf,write_retu_num=0xf;
uint8_t w_buf[FLASH_WRITE_LEN] = {0};
uint8_t r_buf[FLASH_WRITE_LEN] = {0};for(uint16_t i = 0;i < FLASH_WRITE_LEN;i++) { w_buf[i] = i; } co_printf("**********************Start->Erase**********************\r\n"); erase_retu_num=flash_erase(FLASH_ADDR, FLASH_SECTOR_SIZE); co_printf("erase_retu_num %d\r\n",erase_retu_num); co_printf("Erase->Write\r\n"); write_retu_num=flash_write(FLASH_ADDR, FLASH_WRITE_LEN, w_buf); co_printf("write_retu_num %d\r\n",write_retu_num); co_delay_100us(10*2000); erase_retu_num=flash_read(FLASH_ADDR, FLASH_WRITE_LEN, r_buf); co_printf("read retu_num %d\r\n",read_retu_num); co_printf("Write->Read\r\n"); show_reg(r_buf, FLASH_WRITE_LEN, 1);}*
通过串口打印,发现写入与读取的数据不一致,这是哪里的问题,该怎么解决