主题中讨论的其他器件: SysConfig
工具与软件:
大家好、团队成员:
我们需要在 MSPM0L1305.ASAP 中检查 RAM 测试。任何人可以吗?请 尽快在 MSPM0L1305.ASAP 中建议如何实现该测试
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
大家好、团队成员:
我们需要在 MSPM0L1305.ASAP 中检查 RAM 测试。任何人可以吗?请 尽快在 MSPM0L1305.ASAP 中建议如何实现该测试
您好!
对于 MSPM0L1305、还有针对闪存的 ECC 和经过奇偶校验的 SRAM。
请参阅本文档 MSPM0 L 系列32MHz 微控制器技术参考手册(修订版 D)的1.3.2 (TI.com)
要测试该函数、您可以将数据写入未检查的 SRAM、 然后从经过奇偶校验的 SRAM 中读取、之后将生成奇偶校验错误。
此致、
Zoey
Zoey、您好!
谢谢你这么多的答复
空 Reset_Handler (空)
{
_asm (
"LDR R1、=0x20000000\n"// SRAM 的起始地址
"LDR R2、=0x20001000\n"// SRAM 的结束地址
"MOV R3、#0x0A\n\t"//测试模式
"SRAM_TEST_LOOP:\n"
"CMP R1、R2\n"//将当前地址与结束地址进行比较
"Bge SRAM_TEST_DONE\n"//如果达到结束地址、则退出循环
"STR R3、[R1]\n"//将测试模式写入 R1指向的 SRAM 地址
"LDR R4、[R1]\n"//从 R1指向的 SRAM 地址读回
"CMP R4、R3\n"//将读取值与测试模式进行比较
"BNE SRAM_TEST_FAILED\n"//如果不匹配、则分支
"添加 R1、R1、#4\n"//为下一次迭代增加地址
"b SRAM_TEST_LOOP\n"//重复循环
"SRAM_TEST_DONE:\n"
".global _c_int00\n"
"b _c_int00\n"//跳转至 C 初始化例程
"SRAM_TEST_FAILED:\n"
"b SRAM_TEST_FAILED\n"//针对失败测试的无限循环或错误处理
);
}
在这两个 section.ca中显示了一个无效指令、请帮我解决这个问题
您好!
请参阅以下代码:
/* Erase SRAM completely before jumping to BSL */ __asm( #if defined(__GNUC__) ".syntax unified\n" /* Load SRAMFLASH register*/ #endif "ldr r4, = 0x41C40018\n" /* Load SRAMFLASH register*/ "ldr r4, [r4]\n" "ldr r1, = 0x03FF0000\n" /* SRAMFLASH.SRAM_SZ mask */ "ands r4, r1\n" /* Get SRAMFLASH.SRAM_SZ */ "lsrs r4, r4, #6\n" /* SRAMFLASH.SRAM_SZ to kB */ "ldr r1, = 0x20300000\n" /* Start of ECC-code */ "adds r2, r4, r1\n" /* End of ECC-code */ "movs r3, #0\n" "init_ecc_loop: \n" /* Loop to clear ECC-code */ "str r3, [r1]\n" "adds r1, r1, #4\n" "cmp r1, r2\n" "blo init_ecc_loop\n" "ldr r1, = 0x20200000\n" /* Start of NON-ECC-data */ "adds r2, r4, r1\n" /* End of NON-ECC-data */ "movs r3, #0\n" "init_data_loop:\n" /* Loop to clear ECC-data */ "str r3, [r1]\n" "adds r1, r1, #4\n" "cmp r1, r2\n" "blo init_data_loop\n" );
此致、
Zoey
Zoey、您好!
谢谢你这么多的答复,对我来说,它是不工作的。 我附上了供您参考的代码
否、请使用以下代码:
void toggle(void) { SYSCFG_DL_init(); DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_TEST_PIN); while(1){} }
如果您不使用 while (1)
代码将运行到 main 函数中、GPIO 将再次初始化。
Zoey、您好!
感谢您的回复、它在我这边工作、但我无法调试、我附上了代码供您参考、请帮我解决这个问题
您好!
如果要分步调试 汇编语言、请将代码更改为:
例如:
发件人:
__asm( "ldr r1, =0x20000000\n" // Start address of SRAM "ldr r2, =0x20001000\n" // End address of SRAM );
收件人:
__asm("ldr r1, =0x20000000\n"); // Start address of SRAM __asm(""ldr r2, =0x20001000\n"); // End address of SRAM
此致、
Zoey
Zoey、您好!
我们现在处于 RAM 测试部分的最后阶段、但我们面临的小问题、即使在遵循您的指令后、我也无法进行调试
我附上了供您参考的代码
我正面临这一问题、在这方面、您能帮我吗
您好!
这是因为、一旦 CPU 运行 完成切换、您就无需运行下一个函数。
如果您希望在此函数之后运行主代码、可以添加
_asm (
".global _c_int00\n"
" b _c_int00\n"
);
调试到您的切换函数中、然后是 PC、并更改为主函数。 但是请确保你也许需要 while (1);来结束你的函数、或者在你完成主代码后、它仍将运行到 Default_Handler 中