硬汉嵌入式论坛

 找回密码
 立即注册
查看: 430|回复: 0
收起左侧

[Lua] Lua获取芯片NVIC优先级分组和芯片内核版本

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-7-5 01:50:42 | 显示全部楼层 |阅读模式



FreeRTOS的Trace功能需要用这个解析。

M0, M0+是没有优先级分组的,所以要做个区分

[Lua] 纯文本查看 复制代码
NVIC_GROUP = {
    "NVIC优先级分组 = 无分组 内核: ",
    "NVIC优先级分组 = 无分组 内核: ",
    "NVIC优先级分组 = Group4 内核: ",
    "NVIC优先级分组 = Group3 内核: ",
    "NVIC优先级分组 = Group2 内核: ",
    "NVIC优先级分组 = Group1 内核: ",
    "NVIC优先级分组 = Group0 内核: ",
}

function printf(...)
	print(string.format(...))
end

function ReadCore(void)
	local cpuid
	local partno
	local p
	local patch
	local rev
    local group
	
	local list = 
    {
        {0xC60, "Cortex-M0+"},
        {0xC20, "Cortex-M0"},
        {0xC21, "Cortex-M1"},
        {0xC23, "Cortex-M3"},
        {0xC24, "Cortex-M4"},
        {0xD22, "Cortex-M55"},
        {0xD21, "Cortex-M33"},
        {0xC27, "Cortex-M7"},
        {0xD20, "Cortex-M23"},
        
        {0xD23, "Cortex-M85"},
        
        {0x132, "STAR-MC1"},
        
        {0xFFF, "End"},     --结束标致行
    };
        
	cpuid = pg_read32(0xE000ED00)
    partno = (cpuid >> 4) & 0xFFF

	patch = cpuid & 0x0F
    rev = (cpuid >> 20) & 0x0F
	
    for i = 1, 255, 1 do 
        if (list[i][1] == 0xFFF) then
            p = "Unknow"
			break
		end
            
        if (list[i][1] == partno) then
            p = list[i][2]

            if((partno == 0xC60) or (partno == 0xC20)) then
                group = 1
            else
                group = pg_read32(0xE000ED0C)
                group = (group & 0x00000700) >> 8
            end
			
		p =NVIC_GROUP[group] .. p .. string.format("  r%dp%d", rev, patch)
            break
        end
    end
    
    return p
end


  print(string.format("%s", ReadCore()))



下载 (4).png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 03:48 , Processed in 0.151442 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表