找回密码
 注册
搜索
查看: 1331|回复: 6

[讨论] 请问bluelab4.0平台下关于BC5模块内DSP控制PIO的问题。

[复制链接]
发表于 2010-7-12 15:33:53 | 显示全部楼层 |阅读模式
我用的软件开发平台是bluelab4.0。最近用BC5的vm控制PIO完成数据通信,库函数PioSet();PioSetDir();但是vm控制PIO效率低,执行时间长。
我想用BC5模块内DSP去控制PIO,但是不知道怎样去控制,那位高手有这方面的经验,请赐教。
 楼主| 发表于 2010-7-20 09:45:33 | 显示全部楼层
期待大侠帮助。
点评回复

使用道具 举报

 楼主| 发表于 2010-7-21 19:38:48 | 显示全部楼层
谢谢,这个方法我试过了,native模式一个PioSet()大约为25Us。还是没达到我需要的时序要求。
点评回复

使用道具 举报

发表于 2010-7-20 14:02:23 | 显示全部楼层
你可以使用native模式,用PioSet控制PIO口速度快很多
点评回复

使用道具 举报

发表于 2010-8-24 20:46:25 | 显示全部楼层
用pio模拟数据通信接口?低速还行。首先应该看下datasheet,dsp是否能控制pio,我估计不行。
点评回复

使用道具 举报

发表于 2010-12-10 10:33:08 | 显示全部楼层
我想请问一下楼主的这个问题解决了没有?如果解决了,是如何解决的。因为我也遇到这方面的问题了。我也希望PioSet(),PioSetDir()这两个函数的执行速率快一点。[em14]期待楼主的回复啊!
点评回复

使用道具 举报

发表于 2010-12-20 16:23:31 | 显示全部楼层
以PIO12为例,C程序里面设置:
PioSetDir(1<<12,0);
PioSetKalimba(1<<12,~0);
PioSetDirKalimba(1<<12,0);        startKalimba();

DSP程序:
//read pio state
//This module used register r1,r2
//return r2
.MODULE $M.read_pio_state;
   .CODESEGMENT PM;
   .DATASEGMENT DM;
     
   $read_pio_state:
     
   // push rLink onto stack
   $push_rLink_macro;  
   
   r2 = M[$PIO_IN];
   r2 = r1 AND r2;
   
   M[$read_pio_result] = r2;
  
  // pop rLink from stack
  jump $pop_rLink_and_rts;

.ENDMODULE;


//  set pio to high
//This module used register r1,r2
.MODULE $M.set_pio_high;
   .CODESEGMENT PM;
   .DATASEGMENT DM;
     
   $set_pio_high:
     
   // push rLink onto stack
   $push_rLink_macro;
      
   r3 = r1;   

   r2 = 0xffffff;
   r2 = r2 XOR r1;     //bit reverse.
   r1 = M[$PIO_DIR];
   r1 = r1 AND r2;
   M[$PIO_DIR] = r1;
   
   r1 = r3;
   r2 = M[$PIO_OUT];
   r2 = r2 OR r1;
   M[$PIO_OUT] = r2;

   // pop rLink from stack
   jump $pop_rLink_and_rts;

.ENDMODULE;


//  set pio to low
//This module used register r1,r2
.MODULE $M.set_pio_low;
   .CODESEGMENT PM;
   .DATASEGMENT DM;
     
   $set_pio_low:
     
   // push rLink onto stack
   $push_rLink_macro;

   r2 = M[$PIO_DIR];
   r2 = r2 OR r1;
   M[$PIO_DIR] = r2;
   
   r2 = 0xffffff;
   r2 = r2 XOR r1;     //bit reverse.
   r1 = M[$PIO_OUT];
   r1 = r1 AND r2;
   M[$PIO_OUT] = r1;
   
  // pop rLink from stack
   jump $pop_rLink_and_rts;

.ENDMODULE;
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 10:35 , Processed in 0.050357 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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