实际测试可以用PRUSS初始化IO. - AM57x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5322|回复: 5
打印 上一主题 下一主题

[已解决] 实际测试可以用PRUSS初始化IO.

[复制链接]

9

主题

24

帖子

8万

积分

金牌会员

Rank: 6Rank: 6

积分
82453
跳转到指定楼层
楼主
发表于 2017-5-23 15:13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我实际写了个程序做测试.
  1. /*
  2. * LED Bilnk Pruss code for tl_am572x.
  3. * vefone <vefone2lemon@gmail.com>
  4. * Copyright (C) 2016 Tronlong, Inc.
  5. *
  6. */

  7. #include <stdint.h>
  8. #include <pru_cfg.h>
  9. #include "resource_table_empty.h"

  10. /* LED port address */
  11. #define GPIO3_BASE_ADDR             0x48057000
  12. #define GPIO_OE_OFFSET              0x134
  13. #define GPIO_CLRDATAOUT_OFFSET      0x190
  14. #define GPIO_SETDATAOUT_OFFSET      0x194

  15. #define CTRL_CORE_PAD_VIN1A_D15 0x4A003530

  16. //volatile register uint32_t __R30;

  17. volatile pruCfg CT_CFG __attribute__((cregister("PRU_CFG", near), peripheral));

  18. int main(void) {

  19.     uint32_t i;
  20.     uint32_t value;

  21.     /* GPI Mode 0, GPO Mode 0 */
  22.     CT_CFG.GPCFG0 = 0;
  23.     /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */
  24.     CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;

  25.     uint32_t led_set_addr;
  26.     uint32_t led_clr_addr;
  27.     uint32_t led_oe_addr;
  28.     uint32_t ctrl_core_io_mode;

  29.     led_oe_addr = GPIO3_BASE_ADDR + GPIO_OE_OFFSET;
  30.     ctrl_core_io_mode = CTRL_CORE_PAD_VIN1A_D15;
  31.     led_set_addr = GPIO3_BASE_ADDR + GPIO_SETDATAOUT_OFFSET;
  32.     led_clr_addr = GPIO3_BASE_ADDR + GPIO_CLRDATAOUT_OFFSET;

  33.     *(uint32_t*)led_clr_addr |= 1 << 19; //turn down LED0 (GPIO3_19)
  34.     *(uint32_t*)ctrl_core_io_mode = 0x0001000E;
  35.     *(uint32_t*)led_oe_addr = 0x00000000;

  36.     while(1) {
  37.             value = 1 << 19;
  38.             *(uint32_t*)led_set_addr |= value;
  39.             __delay_cycles(100000000); // half-second delay
  40.             *(uint32_t*)led_clr_addr |= value;
  41.             __delay_cycles(100000000); // half-second delay
  42.     }
  43.      /* Halt the PRU core - shouldn't get here */
  44.      //__halt();
  45. }
复制代码
然后先连接A15核心,再连接PRU0核心,就像下图一样.寄存器数值没手动改过,ARM端也没跑程序.然后LED就闪烁起来了.看图.




这么说PRU也是有权限的啊,是为什么呢?还是说因为仿真?


本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2017-5-23 17:26:36 | 只看该作者
你要先确定你的代码是否真的能修改pinmux,可能不是你的代码生效
回复 支持 反对

使用道具 举报

9

主题

24

帖子

8万

积分

金牌会员

Rank: 6Rank: 6

积分
82453
板凳
 楼主| 发表于 2017-5-23 23:03:59 | 只看该作者
human 发表于 2017-5-23 17:26
你要先确定你的代码是否真的能修改pinmux,可能不是你的代码生效

我测试过单步寄存器,确实有其中一个生效的,在群中有回复.

点评

AM5728的pru和am437x的不太一样,am5728的pru有权限修改pinmux了。  详情 回复 发表于 2017-5-24 08:28
在我的印象中,pru是没有权限修改pinmux的。 可参考以下链接: http://processors.wiki.ti.com/index.php/PRU-ICSS_FAQ#Q:_Why_does_my_PRU_firmware_hang_when_reading_or_writing_to_an_address_external_to_the_P  详情 回复 发表于 2017-5-23 23:56
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
地板
发表于 2017-5-23 23:56:17 | 只看该作者
cl17726 发表于 2017-5-23 23:03
我测试过单步寄存器,确实有其中一个生效的,在群中有回复.

在我的印象中,pru是没有权限修改pinmux的。
可参考以下链接:
http://processors.wiki.ti.com/index.php/PRU-ICSS_FAQ#Q:_Why_does_my_PRU_firmware_hang_when_reading_or_writing_to_an_address_external_to_the_PRU_Subsystem.3F

您这个问题,确实是因为啥,我这边还没时间测试,也说不上是什么情况

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
5#
发表于 2017-5-24 08:28:21 | 只看该作者
cl17726 发表于 2017-5-23 23:03
我测试过单步寄存器,确实有其中一个生效的,在群中有回复.

AM5728的pru和am437x的不太一样,am5728的pru有权限修改pinmux了。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

9

主题

24

帖子

8万

积分

金牌会员

Rank: 6Rank: 6

积分
82453
6#
 楼主| 发表于 2017-5-25 11:27:59 | 只看该作者
vefone 发表于 2017-5-24 08:28
AM5728的pru和am437x的不太一样,am5728的pru有权限修改pinmux了。

看着图权限大了好多.
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-30 01:55 , Processed in 0.048334 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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