0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用先楫芯片构建J-scope工程及运行

331062281 来源:先楫半导体HPMicro 2023-07-07 10:19 次阅读

前 言

J-Scope是Segger推出的一款免费软件,用于MCU运行时,实时显示数据波形,可以以类似示波器的方式显示多个变量的值。本文提供简单的例子演示如何基于先楫半导体芯片新建 J-scope工程并显示运行数据。

以下内容介绍分为四个模块:工作模式、软硬件版本、HSS模式工程创建和RTT模式工程创建。

一、工作模式

J-Scope分为HSS和RTT两种模式:

1. HSS(High-Speed-Sampling)模式:jlink周期性的读取数据,将数据上传至j-scope显示。

优点:

1)简单,代码无需做任何更改

2)通过elf文件确定变量地址

缺点:

1)相比RTT模式数据传输速度更慢

2)异步采样,具有相当的非实时性

2. RTT(Real-Time-Transfer)模式:实时传输模式,代码主动上报变量数值至j-scope显示。

优点:

1)比HSS模式速度更高,最大上传速度可达2MB/s

2)数据上传与MCU内程序运行是同步的,具有实时性

3)要监控的变量可自动检索,无需指定地址或提供elf文件

4)数据可加时间戳

缺点:

1)需要写代码,具体的,需要加载RTT组件,并在代码中手动上传要显示的数据

2)占用一定的内存(RTT Buffer)

二、软硬件版本

硬件J-Link:V10版本及以上(支持risc-v内核),推荐使用J-Link V11。

软件J-Scope:J-Link Software and Documentation pack V7.88f及以上,一般使用最新版本J-Link驱动即可。安装完成后在windows内搜索即可找到J-Scope GUI工具。

三、HSS模式工程创建

1.代码添加

打开SDK1.1.0内hello_world工程,添加如下代码:

float my_pi = 3.141592654f;

float my_two_pi = 6.283185307f;

typedef struct{

float ts;

float omega;

float theta;

float sinval;

float cosval;

}jscope_debug_t;

jscope_debug_t jscope_debug = {

.ts = 0.001f,

.omega = 2.0f * 3.141592654f * 10.0f,

.theta = 0.0f,

.sinval = 0.0f,

.cosval = 0.0f,

};

void jscope_debug_run(jscope_debug_t *p)

{

p->theta += p->omega * 0.001f;

if(p->theta > my_pi)

p->theta = p->theta - my_two_pi;

p->sinval = sinf(p->theta);

p->cosval = cosf(p->theta);

return;

}

以上代码定义了jscope_debug_t结构体,添加了一个jscope_debug_t型变量,并在jscope_debug_run函数内对变量值做修改。

添加如下代码,设计一个1ms定时器中断,在中断函数内执行jscope_debug_run:

void gptmr_init(void)

{

gptmr_channel_config_t config;

gptmr_channel_get_default_config(GPTMR, &config);

config.reload = 100*1000;

gptmr_enable_irq(GPTMR, GPTMR_CH_RLD_IRQ_MASK(GPTMR_CH));

gptmr_channel_config(GPTMR, GPTMR_CH, &config, false);

gptmr_channel_reset_count(GPTMR, GPTMR_CH);

gptmr_start_counter(GPTMR, GPTMR_CH);

intc_m_enable_irq_with_priority(GPTMR_IRQ, 1);

}

void isr_gptmr(void)

{

volatile uint32_t s = GPTMR->SR;

GPTMR->SR = s;

if (s & GPTMR_CH_RLD_STAT_MASK(GPTMR_CH)) {

//this is a 1ms isr_handler

jscope_debug_run(&jscope_debug);

}

}

SDK_DECLARE_EXT_ISR_M(GPTMR_IRQ, isr_gptmr)

注意:需要将监控的变量放在noncachable内存区,或者直接关闭L1缓存(l1c_dc_disable()),否则数据一直在l1缓存内,J-Link读不到数据。

2.GUI操作

打开J-Scope,新建工程,如下所示:

ed55a5d6-1c6b-11ee-962d-dac502259ad0.png

在弹出的界面配置如下:

ed617514-1c6b-11ee-962d-dac502259ad0.png

1、本文作者使用HPM6200evk,因此设备选择HPM6280xPAx。注意,如果找不到对应的芯片型号,考虑升级J-Link驱动包。

2、Sampling Source选择HSS模式。

3、Sampling Rate选择1Khz,即每1000us采集一次数据。

4、指定elf文件。HSS模式会解析elf文件确定变量地址。

ed837bdc-1c6b-11ee-962d-dac502259ad0.png

选择要监控的数据,在变量后面的方框内打勾即可。

edac8f9a-1c6b-11ee-962d-dac502259ad0.png

保证芯片内程序正在运行,点击图中开始采样按钮,即可开始采集波形并显示。移动光标可以查看某一时刻采集的3个数据的值。

edce6f2a-1c6b-11ee-962d-dac502259ad0.png

Sampling后有两个功能按钮,前一个开始/暂停采样,后一个停止采样。Target后有两个功能按钮,前一个开始/暂停芯片执行,后一个复位芯片。

ede3c14a-1c6b-11ee-962d-dac502259ad0.png

界面右上角放大缩小符号以及其后的下拉框,可控制时间轴缩放。

edfae6a4-1c6b-11ee-962d-dac502259ad0.png

界面下方watch window内,可显示变量名、变量地址、变量数值(光标处),最大值、最小值、滑动平均值。修改 Y Resolution 与 Y Offset,可以对每一根曲线的Y轴缩放与偏移进行设置。

四、RTT模式工程创建

1. 代码添加

打开SDK1.1.0内hello_world工程的cmakelists,做如下修改:

ee1468e0-1c6b-11ee-962d-dac502259ad0.png

添加如下代码:

float my_pi = 3.141592654f;

float my_two_pi = 6.283185307f;

typedef struct{

float ts;

float omega;

float theta;

float sinval;

float cosval;

}jscope_debug_t;

jscope_debug_t jscope_debug ={

.ts = 0.001f,

.omega = 2.0f * 3.141592654f * 10.0f,

.theta = 0.0f,

.sinval = 0.0f,

.cosval = 0.0f,

};

void jscope_debug_run(jscope_debug_t *p)

{

p->theta += p->omega * 0.001f;

if(p->theta > my_pi)

p->theta = p->theta - my_two_pi;

p->sinval = sinf(p->theta);

p->cosval = cosf(p->theta);

return;

}

void isr_gptmr(void)

{

volatile uint32_t s = GPTMR->SR;

GPTMR->SR = s;

if (s & GPTMR_CH_RLD_STAT_MASK(GPTMR_CH)) {

//this is a 10ms isr_handler,add your code here

jscope_debug_run(&jscope_debug);

}

}

SDK_DECLARE_EXT_ISR_M(GPTMR_IRQ, isr_gptmr)

void gptmr_init(void)

{

gptmr_channel_config_t config;

gptmr_channel_get_default_config(GPTMR, &config);

config.reload = 100*100;

gptmr_enable_irq(GPTMR, GPTMR_CH_RLD_IRQ_MASK(GPTMR_CH));

gptmr_channel_config(GPTMR, GPTMR_CH, &config, false);

gptmr_channel_reset_count(GPTMR, GPTMR_CH);

gptmr_start_counter(GPTMR, GPTMR_CH);

intc_m_enable_irq_with_priority(GPTMR_IRQ, 1);

}

main函数如下:

int main(void)

{

int u;

char JS_RTT_UpBuffer[4096]; // J-Scope RTT Buffer

int JS_RTT_Channel = 1; // J-Scope RTT Channel

int i;

board_init();

board_init_led_pins();

gptmr_init();

l1c_dc_disable();

board_timer_create(LED_FLASH_PERIOD_IN_MS, board_led_toggle);

printf("helloworld ");

SEGGER_RTT_ConfigUpBuffer(JS_RTT_Channel, "JScope_f4f4f4f4f4", &JS_RTT_UpBuffer[0], sizeof(JS_RTT_UpBuffer),SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);

while(1)

{

SEGGER_RTT_Write(JS_RTT_Channel,&jscope_debug, sizeof(jscope_debug));

}

return 0;

}

上述代码首先配置了RTT组件的upbuffer1,将其命名为"JScope_f4f4f4f4f4"(命名规则下文描述),配置其占用的内存区为JS_RTT_UpBuffer,数组大小为4096个字节,以及写函数的调用策略为当内存区满时以阻塞模式写入(请参考RTT wiki百科)。 然后在while循环内,不停的调用SEGGER_RTT_Write函数上传数据到J-Scope进行显示。 RTT模式uploadbuffer命名规则:

ee4697de-1c6b-11ee-962d-dac502259ad0.png

通道名称以“JScope_”开头,后面跟解析RTT内存数据需要的数据个数、数据类型与每个数据占用的字节数。例如浮点数一定占用4个字节,而整形可以占用1、2、4个字节。

2.GUI操作

打开J-Scope,新建工程,如下所示:

ed55a5d6-1c6b-11ee-962d-dac502259ad0.png

在弹出的界面配置如下:

ee7d3316-1c6b-11ee-962d-dac502259ad0.png

选择设备,芯片型号。

选择RTT模式。

如果需要更高的传输速率,可以增加JTAG速度,比如12000khz或20000khz。

eea0b354-1c6b-11ee-962d-dac502259ad0.png

进入GUI界面,可以看到我们没有提供任何的elf文件,J-Scope自动识别出上报的结构体有5个float型数据。这是RTT组件自动在内存中搜索,找到了我们定义的RTT buffer的结果。由于没有提供elf,所以watch window内无变量名信息,也无地址信息。

eeca9156-1c6b-11ee-962d-dac502259ad0.png

采样可以观察到,波形明显有锯齿了,说明RTT上传的速度高,同一个数据上传了多次。

eee831fc-1c6b-11ee-962d-dac502259ad0.png

trigger功能可以用来达成条件触发采样,如图所示,设置sin的值大于0.5时触发采样,则波形从sin=0.5358时开始采样。

小 结

本文首先介绍了基于HPM6000系列芯片如何使用J-Scope调试。总体而言J-Scope是一款相当易用的工具,使用时只需注意变量放在非l1缓存区即可。读者可自行尝试,提高调试效率。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50816

    浏览量

    423613
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17148

    浏览量

    351197
  • 调试
    +关注

    关注

    7

    文章

    578

    浏览量

    33941
  • RTT
    RTT
    +关注

    关注

    0

    文章

    65

    浏览量

    17130
  • 先楫半导体
    +关注

    关注

    10

    文章

    214

    浏览量

    2120

原文标题:如何用先楫芯片构建J-scope工程及运行

文章出处:【微信号:HPMicro,微信公众号:先楫半导体HPMicro】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何用芯片构建J-scope工程运行

    前言J-Scope是Segger推出的一款免费软件,用于MCU运行时,实时显示数据波形,可以以类似示波器的方式显示多个变量的值。本文提供简单的例子演示如何基于半导体的
    的头像 发表于 07-08 10:02 3824次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>芯片</b><b class='flag-5'>构建</b><b class='flag-5'>J-scope</b><b class='flag-5'>工程</b>及<b class='flag-5'>运行</b>

    【专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码

    ,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐。本期专题为大家讲解的J-Scope波形软件简单易用,不占用系统额外资源,无需用户写目标板代码,仅需将JLINK插上即可。2
    发表于 07-02 15:27

    灵动微课堂 (第163讲) | MM32F013x——J-Scope虚拟示波器功能

    J-Scope上位机J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。它不需要SWO或目标上的任何额外引脚等功能,使用标准的调试接口即可。J-S
    发表于 04-09 18:24

    怎样去安装J-Flash和J-Scope软件呢

    J-Link是什么?J-Scope是什么?怎样去安装J-Flash和J-Scope软件呢?
    发表于 11-09 07:03

    J-Scope是什么?如何对J-Scope软件进行配置呢

    J-Link是什么?J-Link仿真器有何功能呢?J-Scope是什么?如何对J-Scope软件进行配置呢?
    发表于 11-09 07:21

    如何去使用J-Scope软件的功能呢

    J-Link是什么?J-Scope又是什么?如何去使用J-Scope软件的功能呢?
    发表于 11-10 06:09

    如何对J-Scope软件进行配置呢

    J-Link是什么?J-Scope又是什么?如何对J-Scope软件进行配置呢?  
    发表于 11-11 08:06

    J-Scope虚拟示波器的相关资料推荐

    的开源软件,大家有兴趣可以看一下。一般情况下虚拟示波器软件都是通过串口接收数据的,所以要求MCU通过串口把数据打包成软件支持的协议发给虚拟示波器软件。02、J-Scope是什么J-ScopeJ-link的功能之一,
    发表于 02-28 07:28

    如何使用Segger Embedded Studio开发HPM6750?

    进行调试,Segger J-Link也已经官方支持HPM6000系列的芯片,只是该开发板没有提供标准的JTAG调试接口,因此需要客户自己通过焊接引出对应的调试引脚来连接
    发表于 07-26 14:48

    如何在J-Scope中设置RTT控制块的搜索位置?

    芯片比较特殊,或者偶然出现了无法自动搜索到RTT控制块的情况,可以在创建J-Scope工程的时候添加J-Link脚本文件(*.script格式文件)来指定RTT控制块的搜索位置。在
    发表于 03-22 14:01

    虚拟示波器J-scope使用教程

    J-Scope介绍J-Scope可以像示波器一样显示多个变量的值。它读取一个elf文件,并允许选择多个变量以使其可视化。我们可以简单地将目标微控制器连接到J-Link,刷新应用程序并启动J-S
    的头像 发表于 03-19 17:00 1.1w次阅读

    什么是J-Scope

    J-Scope是Segger推出的一款免费软件,用于MCU运行时,实时显示数据的波形。
    的头像 发表于 07-29 15:02 5776次阅读

    J-Scope简介与使用方法

    J-Scope是Segger推出的一款免费软件,用于MCU运行时,实时显示数据的波形。
    的头像 发表于 08-02 10:52 9461次阅读

    如何使用J-scope

    J-Scope可以像示波器一样显示多个变量的值。它读取一个elf文件,并允许选择多个变量以使其可视化。我们可以简单地将目标微控制器连接到J-Link,刷新应用程序并启动J-Scope
    的头像 发表于 11-16 11:51 3353次阅读
    如何使用<b class='flag-5'>J-scope</b>呢

    如何在J-Scope中设置RTT控制块的搜索位置?

    J-Scope是SEGGER公司推出的搭配J-Link使用的调试软件,可以在MCU运行时,实时查看全局变量的值,并以图形化显示,就像示波器一样。
    的头像 发表于 03-06 09:26 2615次阅读