012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
⚠️裸机仓库https://gitee.com/simonchina_carel_li/mini2440-bare-metal.git⚠️Tag:11-sdram-apply1. 这次要做什么我们已经完成了sdram的初始化现在sdram已经可以使用了我们之前的固件栈空间是跑在SOC内置的4KB的SRAM上对于后续的固件开发肯定是不够的现在我们需要将整体程序适配到SDRAM2. 方案分析项目怎么做将栈放到sdram修改SVC模式和IRQ模式栈指针到SDRAM顶部并多预留IRQ栈空间.data段和.bss的处理适配这个不需要修改链接脚本修改增加sdram内存块并重新段布局3. 代码实现start.s/* 设置栈顶(给IRQ SP预留512空间) ldr sp, 0x40000E00 */ 设置栈顶(给IRQ SP预留4K空间) ldr sp, (0x34000000 - 4096)irq_handler.c,/// brief 中断控制器初始化 /// 设置IRQ模式的SP, 禁用IRQ/FIQ void irq_handler_init() { unsigned long cpsr; __asm__ volatile ( // 读取cpsr mrs %0, cpsr\n\t // 禁用IRQ/FIQ, 切换至IRQ模式 msr cpsr_c, #0b11010010\n\t // 设置IRQ模式的SP // ldr sp, 0x40001000\n\t ldr sp, 0x34000000\n\t // 恢复原来模式和原始中断状态 msr cpsr, %0\n\t : r (cpsr) : : sp, cc, memory ); // ...略... }mini2440_nor.lds,MEMORY { rom (rx) : ORIGIN 0x00000000, LENGTH 16M sram (rwx) : ORIGIN 0x40000000, LENGTH 4K sdram (rwx) : ORIGIN 0x30000000, LENGTH 64M // 增加sdram区域 } // 下方的sram改为sdram重新编译按键测试程序make key烧录运行测试按键依旧可用中断照常触发这节有点划水的感觉~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2500311.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!