【BB-Black测试】 + 裸奔ING

[复制链接]
3156|8
 楼主| le062 发表于 2014-9-17 23:41 | 显示全部楼层 |阅读模式
本帖最后由 le062 于 2014-9-19 23:37 编辑

硬件连接方法:
【BB-Black测试】+ JTAG裸奔

索引
流水灯
PRU核的使用
 楼主| le062 发表于 2014-9-17 23:52 | 显示全部楼层
本帖最后由 le062 于 2014-9-17 23:57 编辑

    在AM335X_StarterWare_02_00_01_01中就有一个操作LED的demo,不过它的工程是使用了预编译好的几个底层库,如下:


    下面,将重建一个工程,把这几个库中源码导入,一起编译,实现一个流水灯。

    建立新工程后,将上图中几个例程的源码导入,在main函数中简单调用gpio的操作函数,编译,发现drivers下几个c文件编译失败,可以将这几个文件注释掉(暂时用不到);还有在system下的汇编文件有几条关于NEON的指令报错,这儿需要将编译选项中的--neon勾选,重新编译通过。

    在调试过程中遇到过几种问题:
    1:调试器无法链接,这个问题一般通过调试器配置页面下的TEST CONNECTION进行连接测试
    2:我们跑的程序默认需要加载到ddr中运行,所以需要通过一个脚本进行相关初始化。需要如下配置a8核,至于m3核,直接bypassed。

    3:在脚本运行完成后报如下错误:

    这个具体原因不清楚,解决方法是不要让bbb在上电时进入linux,比如在uboot中stop autoboot。

    然后,基本上就可以跑起来了,当然整个过程相对于一般单片机繁琐了很多。

    Main.c代码 和st的差不多吧。
  1. #include "soc_AM335x.h"
  2. #include "beaglebone.h"
  3. #include "gpio_v2.h"

  4. #define GPIO_INSTANCE_ADDRESS           (SOC_GPIO_1_REGS)
  5. #define GPIO_INSTANCE_PIN_NUMBER        (23)

  6. static void Delay(volatile unsigned int count)
  7. {
  8.     while(count--);
  9. }

  10. int main()
  11. {
  12.     GPIO1ModuleClkConfig();
  13.     GPIOModuleEnable(GPIO_INSTANCE_ADDRESS);
  14.     GPIOModuleReset(GPIO_INSTANCE_ADDRESS);
  15.     GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
  16.                    GPIO_INSTANCE_PIN_NUMBER,
  17.                    GPIO_DIR_OUTPUT);
  18.     GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
  19.                    21,
  20.                    GPIO_DIR_OUTPUT);
  21.     GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
  22.                    22,
  23.                    GPIO_DIR_OUTPUT);
  24.     GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
  25.                    24,
  26.                    GPIO_DIR_OUTPUT);
  27.     while(1)
  28.     {

  29.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  30.                      24,
  31.                      GPIO_PIN_LOW);
  32.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  33.                      21,
  34.                      GPIO_PIN_HIGH);
  35.         Delay(0x7FFFF);

  36.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  37.                      21,
  38.                      GPIO_PIN_LOW);
  39.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  40.                      22,
  41.                      GPIO_PIN_HIGH);
  42.         Delay(0x7FFFF);

  43.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  44.                      22,
  45.                      GPIO_PIN_LOW);
  46.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  47.                      23,
  48.                      GPIO_PIN_HIGH);
  49.         Delay(0x7FFFF);

  50.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  51.                      23,
  52.                      GPIO_PIN_LOW);
  53.         GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
  54.                      24,
  55.                      GPIO_PIN_HIGH);
  56.         Delay(0x7FFFF);
  57.     }

  58. }


附件:工程包,a8初始化脚本(注意工程中位置),两份不错的参考资料







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +6 收起 理由
zhangmangui + 6 很给力!

查看全部评分

 楼主| le062 发表于 2014-9-18 00:18 | 显示全部楼层
NEXT:啃个新鲜的,PRU
小木欧尼 发表于 2014-9-18 19:58 | 显示全部楼层
呵呵 多谢分享
edishen 发表于 2014-9-18 20:08 | 显示全部楼层
不错的东西
zhangmangui 发表于 2014-9-18 22:22 | 显示全部楼层
le062 发表于 2014-9-17 23:52
在AM335X_StarterWare_02_00_01_01中就有一个操作LED的demo,不过它的工程是使用了预编译好的几个底层 ...

非常感谢你的分享    能不能抽时间分享一个视频呢   
lijiabaobei 发表于 2014-9-18 23:02 | 显示全部楼层
视频等待中
 楼主| le062 发表于 2014-9-19 23:18 | 显示全部楼层
本帖最后由 le062 于 2014-9-19 23:44 编辑

PRU可以认为是AM335x上面的另外两颗arm核心,可以与cortex-a8核并行运行。但是它可以访问的地址是十分“限制”的(包括寄存器,ram)。

比如,在a8核中,我们需要控制gpio输出,可以通过
GPIO_1_CLEARDATAOUT (0x4804C190)和GPIO_1_SETDATAOUT (0x4804C194)这两个寄存器写一实现,但是在pru核中无法访问该寄存器,只能通过core registers中的r30寄存器对16个IO进行输出控制,而且这16个IO是固定引脚(很不幸,BBB上的4个LED不在其中)




下面简单说一下如何编译运行pru,这部分最好参看附件文档
首先需要安装ccs6,新版ccs多了一个pru的c编译器,编写程序方便很多,在安装时可以勾选,


新建一个pru工程,编写pru程序,生成固件。
随便选一个am3359-a8核的工程,开始调试,

加载AM335x_PRU_ICSS.gel,

依次执行下面两个脚本函数





然后就可以连接pru核
在memory窗口下加载之前生成的pru固件,调试运行,OVER



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ykhakuna 发表于 2015-4-29 23:58 | 显示全部楼层
本帖最后由 ykhakuna 于 2015-4-30 22:38 编辑

通了,参照楼主文档以及视频www***.***youtube***.***com/watch?v=iOQisBaDANA
stupid setup, delete the * from the url link

环境:CCS5.5,D版segger jlink(V4.56f),BBB, USB转TTL FT232RL模块
测试uartEcho,能从串口得到信息。




您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

435

帖子

4

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