完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在在移植freeRTOS,卡在了sdio读取过程
程序会一直卡在SD_WaitReadOperation的 while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0)) { timeout--; } 应该是标志位没清除,我检查SDIO的中断进了,DMA的中断没进所以没有清除标志位, 这是我的中断初始化 void NVIC_Configurationsd(void){ NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 这是我的中断void SDIO_IRQHandler(void){vTaskEnterCritical(); HAL_NVIC_ClearPendingIRQ(SDIO_IRQ_ISR); SD_ProcessIRQSrc();vTaskExitCritical();} void SD_SDIO_DMA_IRQHANDLER(void){vTaskEnterCritical(); HAL_NVIC_ClearPendingIRQ(SIDO_DMA_IRQn_ISR); SD_ProcessDMAIRQ();vTaskExitCritical();} 按理来说优先级0-7是不会被rtos给处理的才对,就是奇怪为什么DMA的中断不会进,造成传输没有完成 |
|
相关推荐
10个回答
|
|
同求,最近也遇到了
|
|
|
|
找到真正的原因了.......我启用了stm32的0x10000000的64k内存后就会出现这种原因.....省出点内存关掉就好了
|
|
|
|
你改了启动代码还是MDK的设置,我试过改MDK设置不行
|
|
|
|
|
|
|
|
你设置了IRAM2?????
|
|
|
|
之前设置了,就出了那个问题,取消掉就没问题了
|
|
|
|
我的是407的,看了下10000000开始的64k只能通过cpu访问不能通过外设(DMA)访问,所以才出现了这个问题,要修改分散加载文件才行,不过没时间搞,还在研究freertos怎么弄比较好....
|
|
|
|
|
|
|
|
=-=我也是菜鸟呀
现在就知道要定义 #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler endSV_Handler #define xPortSysTickHandler SysTick_Handler 然后中断全部都要改成NVIC_GROUP_4(不使用SubPriority) 初始化比较耗时的话,要先createtask再初始化 其他的都跟网上说的差不多 现在能跑,但是还有bug stm32进入硬件错误的话,可以改写成 static void HardFault_Handler( void ) __attribute__( ( naked ) ); static void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 n" " ite eq n" " mrseq r0, msp n" " mrsne r0, psp n" " ldr r1, [r0, #24] n" " ldr r2, handler2_address_const n" " bx r2 n" " handler2_address_const: .word prvGetRegistersFromStack n" ); } void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress ) { /* These are volatile to try and prevent the compiler/linker optimising them away as the variables never actually get used. If the debugger won't show the values of the variables, make them global my moving their declaration outside of this function. */ volatile uint32_t r0; volatile uint32_t r1; volatile uint32_t r2; volatile uint32_t r3; volatile uint32_t r12; volatile uint32_t lr; /* Link register. */ volatile uint32_t pc; /* rogram counter. */ volatile uint32_t psr;/* rogram status register. */ r0 = pulFaultStackAddress[ 0 ]; r1 = pulFaultStackAddress[ 1 ]; r2 = pulFaultStackAddress[ 2 ]; r3 = pulFaultStackAddress[ 3 ]; r12 = pulFaultStackAddress[ 4 ]; lr = pulFaultStackAddress[ 5 ]; pc = pulFaultStackAddress[ 6 ]; psr = pulFaultStackAddress[ 7 ]; /* When the following line is hit, the variables contain the register values. */ for( ;; ); } 这样会比较好debug 其他还在摸索 |
|
|
|
不错,我还没看是ucos呢
|
|
|
|
只有小组成员才能发言,加入小组>>
698 浏览 0 评论
1109 浏览 1 评论
2476 浏览 5 评论
2810 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2653 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
656浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
784浏览 6评论
632浏览 5评论
672浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 04:50 , Processed in 1.323564 second(s), Total 98, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号