打印

vsf脚本读写寄存器

[复制链接]
865|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsfopen|  楼主 | 2018-7-24 20:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vsfopen 于 2018-7-24 20:15 编辑

VSF脚本中,最近增加了指针操作,可以通过指针操作,来实现MCU寄存器的读写,下面是demo:
const GPIOA_BASE = 0x40010800;
const CRL = 0, CRH = 1, IDR = 2, ODR = 3, BSRR = 4, BRR = 5;

var GPIOA = pointer_create(GPIOA_BASE, 4);
var i = 0;

while (i < 5)
{
  print("GPIOA[", i, "] = ", GPIOA.get(i), "\r\n");
  i = i + 1;
}

gpio_config(0, 0, GPIO_OUTPP);

while (1)
{
  GPIOA.set(BSRR, 1);
  timer_delayms(500);
  GPIOA.set(BRR, 1);
  timer_delayms(500);
}
这里,pointer_create是新建一个指针实例,指向GPIOA寄存器。pointer_create的第一个参数是物理地址,第二个参数的长度(1代表8位,2代表16位,4代表32位)。
GPIOA.get调用读数据方法,读取指针[偏移]的值,实际偏移量和长度有关。
GPIOA.set调用写数据方法,同样可以指定便宜,GPIOA.set(BSRR, 1)就是设置GPIOA_BSRR寄存器为1。

pointer_create还可以从buffer中建立指针:
var buf = buffer_create(100);
var p = pointer_create(buf, 0, 1);// char *p = &buf[0]
var pos = 0;
while (pos < buf.get_size())
{
  p.set(pos, 0);
  pos = pos + 1;
}
上面的代码,可以简化为:
var buf = buffer_create(100);
memset(buf, 0, buf.get_size());


使用特权

评论回复

相关帖子

沙发
snow01311220| | 2020-2-22 19:59 | 只看该作者
哎 怎么说那~~

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

325

帖子

8

粉丝