使用Beaglebone Black的PRU(一)
2013-12-18 23:57
489 查看
AM335x的PRUSSv2简介
PRUSSv2 = Programmable Real-time Unit Sub-System = PRU-ICSS= PRU Industrial Communication Sub-System =上一代PRUSS的v2进化版这是一个AM335x等芯片上自带的,独立于ARM CPU运行的子系统。其时钟频率为200MHz,可以直接控制特定的IO口,可以达到非常高的实时性要求。一般两种情况需要用到它:一是linux系统的实时性不满足要求的时候;二是芯片的功能模块不够用的时候(比如你想要10个UART,但芯片上只有6个,那你可以用它再创造4个)。
几个可能的应用场合:
高速ADC
摄像机接口
显示屏接口
音频处理
电机反馈控制
从某种意义上说,有了它,我们就有了一个片上CPLD或FPGA,只不过PRU编程不是用VDHL语言,而是用专门的汇编语言。它的汇编语句都是在一个时钟周期内执行完的,没有流水线之类可能扰乱程序时序的因素,这使得程序的可预测性大大提高。
AM335x芯片上带有两个PRU。(不知道能不能同时工作?)
配置BBB,安装PRU assembler和示例程序
root@beaglebone:~/tmp# git clone git://github.com/beagleboard/am335x_pru_package.git Cloning into 'am335x_pru_package'... ... root@beaglebone:~/tmp# cd am335x_pru_package/pru_sw/app_loader/interface root@beaglebone:~/tmp/am335x_pru_package/pru_sw/app_loader/interface# make CROSS_COMPILE="" #无需交叉编译 root@beaglebone:~/tmp/am335x_pru_package/pru_sw/app_loader/interface# cd ../../utils/pasm_source root@beaglebone:~/tmp/am335x_pru_package/pru_sw/utils/pasm_source# ./linuxbuild root@beaglebone:~/tmp/am335x_pru_package/pru_sw/utils/pasm_source# cd ../../example_apps
编辑一下example_apps目录中的Makefile,把 PASM?=../utils/pasm_2 改成 PASM?=../utils/pasm,然后继续
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps# make CROSS_COMPILE=""编译完成以后PRU assembler和示例程序就安装好了。但BBB默认是没有使能pruss的(BB white好像不用进行下面这一步),所以还需要修改一下系统dtb文件
cd /boot cp am335x-boneblack.dtb am335x-boneblack.dtb_orig dtc -I dtb -O dts am335x-boneblack.dtb > am335x-boneblack.dts(插一句,我之前没有仔细看过dtc命令,原来还可以反编译dtb文件啊。。。)
vim am335x-boneblack.dts
找到
pruss@4a30000 { ... status = "disabled"; ... };把"disabled"改成"okay",保存。
dtc -I dts -O dtb am335x-boneblack.dts > am335x-boneblack.dtb_pru cp am335x-boneblack.dtb_pru am335x-boneblack.dtb
然后重启。
最后,把程序运行需要的库文件拷贝到 /usr/lib 目录下,省得每次都得添加引用目录:
即把 pru_sw/app_loader/lib 目录中的4个文件拷贝到 /usr/lib 中。
至此,BBB也已经配置好了。
重启后我们用自带的example_apps测试一下
root@beaglebone:~#cd tmp/am335x_pru_package/pru_sw/example_apps/bin root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps/bin# modprobe uio_pruss #每次重启都要运行这句话 root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps/bin# ./PRU_memAccessPRUDataRam INFO: Starting PRU_memAccessPRUDataRam example. AM33XX INFO: Initializing example. INFO: Executing example. File ./PRU_memAccessPRUDataRam.bin open passed INFO: Waiting for HALT command. INFO: PRU completed transfer. INFO: Example executed succesfully.测试成功。
本文最开始的git文件建议在电脑上也clone一份,里面有几个关于PRU的pdf文档可能需要经常查看。
相关文章推荐
- 使用Beaglebone Black的PRU(二)——Hello World!
- 【转】 使用Beaglebone Black的PRU(三)——实现高达100MHz的GPIO输出
- 使用Beaglebone Black的PRU(三)——实现高达100MHz的GPIO输出
- 使用Beaglebone Black的ADC
- 使用Beaglebone Black 的P8_45,P8_46作为PWM输出
- 使用SSH操作Beaglebone Black
- Beaglebone black(BBB)使用spi接口oled:基于python
- BeagleBone Black: Introduction to PRU-ICSS
- BeagleBone Black 使用注意事项
- 使用Beaglebone Black的IO口
- 在Beaglebone Black上使用C++实现can通讯
- beaglebone black i2s dac使用方法
- 【转】使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动
- 使用Beaglebone Black的SPI
- 使用Beaglebone Black的串口UART
- [转]使用Beaglebone Black的SPI
- Beaglebone Black教程使用SSH通过USB和因特网连接Beaglebone Blac
- BeagleBone Black教程之BeagleBone Black使用到的Linux基础
- Beaglebone black开发板使用SPI1
- 使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动