我可以复制一些现有的组装项目,但是有很多与此相关的文件,我想知道它们是否有必要。
重述此问题的另一种方式是,我想设置CCS还是Eclipse来构建/安装/调试MSP432 Launchpad开发板,最低限度的步骤和文件是什么。
我问是因为我(将作为另一个问题发帖)想要设置一个中断(仅在汇编中)以捕获GPIO端口上的输入。
我已经阅读了很多理论,但是它们并没有转化为实际的特定步骤。
更新:
对于STM32 Nucleo,这非常简单。使用arm gcc,gdb和st-link,只需要两个文件。这是一个示例,显示了一些在重置处理程序中运行的代码。但是MSP432似乎更复杂。
文件linker.script.ld:
/* Define the end of RAM and limit of stack memory */
/* (4KB SRAM on the STM32F031x6 line, 4096 = 0x1000) */
/* (RAM starts at address 0x20000000)
_estack = 0x20001000;
MEMORY
{
FLASH ( rx ) : ORIGIN = 0x08000000, LENGTH = 32K
RAM ( rxw ) : ORIGIN = 0x20000000, LENGTH = 4K
}
文件核心。S:
/*************************************************************************
* PART 1 - SETUP - DIRECTIVES
*************************************************************************/
// These instructions define attributes of our chip and
// the assembly language we'll use:
.syntax unified /* See below after this code area */
/*.cpu cortex-m0 */ /*comment out this line of the example */
.cpu cortex-m4 /* add instead our board's cortex. see above image in this step */
/*.fpu softvfp */ /* comment out this line of the example */
.fpu vfpv4 /* add instead our board's; it does have an FPU */
.thumb
// Global memory locations.
.global vtable
.global reset_handler
/*
* The actual vector table.
* Only the size of RAM and 'reset' handler are
* included, for simplicity.
*/
.type vtable, %object
vtable:
.word _estack
.word reset_handler
.size vtable, .-vtable
/*************************************************************************
* PART 2 - CODE - Hello World
*************************************************************************/
/*
* The Reset handler. Called on reset.
*/
.type reset_handler, %function
reset_handler:
// Set the stack pointer to the end of the stack.
// The '_estack' value is defined in our linker script.
LDR r0, =_estack
MOV sp, r0
// Set some dummy values. When we see these values
// in our debugger, we'll know that our program
// is loaded on the chip and working.
LDR r7, =0xDEADBEEF
MOVS r0, #0
main_loop:
// Add 1 to register 'r0'.
ADDS r0, r0, #1
// Loop back.
B main_loop
.size reset_handler, .-reset_handler
编译:
arm-none-eabi-gcc -x assembler-with-cpp -c -O0 -mcpu=cortex-m0 -mthumb -Wall core.S -o core.o
链接:
arm-none-eabi-gcc core.o -mcpu=cortex-m0 -mthumb -Wall --specs=nosys.specs -nostdlib -lgcc -T./STM32F031K6T6.ld -o main.elf
更新: 希望这对我能决定消除哪些需求和进行哪些修改有帮助。 这是我一直在复制的Code Composer中的一个汇编项目。 在该项目树中,“ Assembly.asm”是我一直使用的文件。它有我的代码和指令。 AssemblyProject
以下是当前项目编译器的包含选项: Compiler Include Options
-谢谢
答案 0 :(得分:1)
这可能会很痛苦,因为CCS对此处理器上的组装项目没有任何现成的支持。我教一个嵌入式系统课程,在那里我们为432编写汇编代码,因此我需要自己弄清楚这一点。这是我所做的修改CCS项目并使之与汇编代码一起工作的方法:
修改了编译器的“包含选项”,以删除默认的包含路径(但必须保留“项目根”):
修改了链接程序文件搜索路径选项,以将libc.a删除为默认库文件。
修改了链接器文件搜索路径选项,以删除默认的包含路径:
在Build选项中添加了一个后构建步骤,以创建反汇编的代码清单:
${CG_TOOL_ROOT}/bin/armdis ${ProjName}.out ${ProjName}.dis
keep the generated assembly
和generate listing file
的汇编程序选项已启用
已修改链接器的符号管理,以将程序入口点设置为Reset_Handler
。这只是复位向量的首选名称。
链接器诊断消息10063被视为评论,并且启用了发出评论的选项。诊断10063通常是警告入口点符号已更改。
已为编译器和链接器启用详细诊断。
修改完项目首选项后,还需要创建一个定义中断向量的程序集文件。该代码类似于:
__STACK_END .equ 0x20010000
.word __STACK_END ; Initial Stack Pointer
.word Reset_Handler ; Start of executable code
.word NMI_Handler ; Non-maskable Interrupt Handler
.word HardFault_Handler ; Hard Fault Handler
.word MemManage_Handler ; MPU Fault Handler
.word BusFault_Handler ; Bus Fault Handler
.word UsageFault_Handler ; Usage Fault Handler
,以此类推,以了解其余的异常和中断。然后创建虚拟处理程序,以后可以覆盖它们:
Reset_Handler: .asmfunc
B $
.endasmfunc
.weak Reset_Handler
.global Reset_Handler
如果查看msp.h头文件,则可以看到如何为内部寄存器(例如控制GPIO端口的寄存器)的地址创建各种常量标识符。您需要针对计划使用的任何寄存器将其转换为汇编语言,然后将这些文件合并到项目中。