vsf脚本读写寄存器

[复制链接]
 楼主| vsfopen 发表于 2018-7-24 20:11 | 显示全部楼层 |阅读模式
本帖最后由 vsfopen 于 2018-7-24 20:15 编辑

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

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

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

  10. gpio_config(0, 0, GPIO_OUTPP);

  11. while (1)
  12. {
  13.   GPIOA.set(BSRR, 1);
  14.   timer_delayms(500);
  15.   GPIOA.set(BRR, 1);
  16.   timer_delayms(500);
  17. }
这里,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中建立指针:
  1. var buf = buffer_create(100);
  2. var p = pointer_create(buf, 0, 1);// char *p = &buf[0]
  3. var pos = 0;
  4. while (pos < buf.get_size())
  5. {
  6.   p.set(pos, 0);
  7.   pos = pos + 1;
  8. }
上面的代码,可以简化为:
  1. var buf = buffer_create(100);
  2. memset(buf, 0, buf.get_size());


snow01311220 发表于 2020-2-22 19:59 | 显示全部楼层
哎 怎么说那~~

90

主题

325

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部