完善资料让更多小伙伴认识你,还能领取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呢
|
|
|
|
只有小组成员才能发言,加入小组>>
809 浏览 0 评论
1161 浏览 1 评论
2535 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2719 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1107浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:28 , Processed in 1.787465 second(s), Total 97, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号