概述
1.1. 实验任务:
不使用总线矩阵搭建系统,系统挂载APB_UART、AHB_SRAM等外设。
1.2. 实验所需模块
CortexM3.v -----------------------------------------顶层
cortexm3ds_logic.v -------------------------------M3内核
cmsdk_ahb_slave_mux.v ---------------------AHB外设选择
cmsdk_apb_slave_mux.v ---------------------APB外设选择
cmsdk_apb_uart.v -------------------------------APB外设UART
cmsdk_ahb_to_sram.v ------------------------AHB外设SRAM
cmsdk_ahb_to_apb.v ----------------------------AHB-APB桥
cmsdk_fpga_sram.v ----------------------------FPGA BlockRam/OnChip SRAM
cmsdk_mcu_addr_decode.v ------------------地址译码模块
cmsdk_ahb_default_slave.v---------------------AHB默认从设备
cm3_code_mux.v -------------------------------将ICODE和ICODE做MUX后输出
1.3. 实验步骤
1. 打开vivado,将文件全部添加到工程。
2. 在顶层文件中例化所有文件,其中需要对decode文件内部修改,以下是要注意的。
在apb_slave_mux和ahb_slave_mux用参数化使能AHB和APB外设。
将default slave设置为AHB PORT3作为缺省外设。
将code_mux放到工程生成code_hadder给decode文件做例化使用。
例化decode文件时,直接将sys_hsel和code_hsel定义为1,将remap_ctrl设置为0。
3. 编写约束文件。
4. 编写KEIL。
打开keil,创建新工程,将以下C文件和启动文件添加到工程。
CortexM3_driver.c
Handler.c
Main.c
Retarget.c
System.c
startup_CM3DS.s
修改keil设置。
在主函数编写UART发送代码。
软件仿真查看寄存器是否正常工作,软件仿真通过之后,把生成的hex路径添加到cmsdk_fpga_sram.v中。
5. Vivado行为级仿真,查看TX以及TX_buffer是否有数据变化,若有变化,则搭建成功。若没有,再去检查一下细节。
1.4 注意事项
1.首先也是最重要的,在不使用总线矩阵搭建最小系统时,译码单元要加以重视,本示例中最小系统挂载了ITCM,DTCM,UART以及一个默认外设,把UART挂到系统上要注意,必须先生成ahb_to_apb的选择信号PSEL¬_APB(这个信号还需要添加到AHB_SLAVE_MUX中),选中了ahb_to_apb之后,把ahb_to_apb这个模块生成的选择信号PSEL,给到apb_slave_mux,在经过apb_slave_mux的执行生成APB外设的选择信号PSEL_UART,这个选择信号给到UART这个模块,才能正确选中UART,才能在硬件层面上把UART挂载到系统上,并能使系统正确访问它。
2.其次,ITCM要放在code_mux下面,DTCM,UART以及默认外设要放到SYS_BUS下面,code_mux是把内核信号ICODE和DCODE进行整合的模块,它的输出要返回给内核,也要传送给DECODE和外设。
3.软件部分你可能遇见的问题,在KEIL上可以正常跑软件仿真,波特率和模式寄存器以及控制寄存器都能正常设置,函数都可以正常跳转,但把生成的HEX文件添加到硬件当中时,问题出现了,硬件无法调到主函数关于UART的部分,这就可能是有关UART的模块,存在大小写不一致的问题,有的模块是小写的uart,有的模块是大写的UART。
由下图可知,在系统总线地址(sys_haddr)为0x40000000-0x4000ffff的时候,UART被选中,而且uart_buf里也有了数据的变化,说明UART在正常发送。
如果前仿通过了,上板出现连接错误,很可能是你的硬件存在问题:
如出现SWD/JTAG Communication Failure
你需要检查一下硬件部分的调试模块,连线是否正确,用IP核生成的时钟例化是否存在问题。
如果出现No Debug Unit Device found
检查一下约束文件是否正确,你的引脚连接有差错也是不能上板的。
上板现象如下
按下复位之后,不断发送数据。
整个工程在本人主页
最后
以上就是殷勤茉莉为你收集整理的不使用总线矩阵的CortexM3最小系统搭建(AHB外设有ITCM,DTCM,DEFAULT_SLAVE和AHB_APB桥,APB外设只有一个UART)附整个工程的全部内容,希望文章能够帮你解决不使用总线矩阵的CortexM3最小系统搭建(AHB外设有ITCM,DTCM,DEFAULT_SLAVE和AHB_APB桥,APB外设只有一个UART)附整个工程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复