导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. LiuQingchang
    L
    • 资料
    • 关注 0
    • 粉丝 0
    • 我的积分 737
    • 主题 7
    • 帖子 15
    • 最佳 1
    • 群组 0

    LiuQingchangLV 4

    @LiuQingchang

    737
    积分
    1
    声望
    6
    资料浏览
    15
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    LiuQingchang 取消关注 关注

    LiuQingchang 发布的最佳帖子

    • 【有无D1-H芯片代码例程】

      请问各位大佬,有没有D1-H芯片的代码例程,例如点灯,gpio,I2C,timer等等。

      发布在 其它全志芯片讨论区
      L
      LiuQingchang

    LiuQingchang 发布的最新帖子

    • 回复: D1-h裸机下修改主频无效

      @awwwwa 您有什么方法可以用示波器测量输出频率吗?

      发布在 其它全志芯片讨论区
      L
      LiuQingchang
    • 回复: D1-h裸机下修改主频无效

      @awwwwa

              for (volatile uint32_t k = 0; k < 3000000; k++) {
                  __asm__("nop");
              }
              gpio_reverse(LIGHT_BLUE);     
      

      这个是每3,000,000个时钟信号,翻转一次小灯,我看小灯也就大概一秒多一点翻转一次,可以推测主频就3M左右。

      发布在 其它全志芯片讨论区
      L
      LiuQingchang
    • 回复: D1-h裸机下修改主频无效

      @awwwwa 我是这样计算的。开一个毫秒定时器

                  TMR0_CTRL_REG &=~(0xFF<<0);  //reset
                  TMR0_CTRL_REG &=~(0x1<<7);   //Periodic mode
                  TMR0_CTRL_REG |=((0x6<<4)|(0x1<<2));    //64 pre-scale,OSC24M
                  TMR0_INTV_VALUE_REG=(uint32_t)(375*time_ms);
                  TMR0_CTRL_REG |=(0x1<<1);    //Reload
                  TMR0_CTRL_REG |=(0x1<<0);    //start
      

      然后在while循环中两秒计算进行了多少次时钟。

              min = gTime[1];
              while(gTime[1]-min <=2)
              {
                  min64++;
                  __asm__("nop");
              }
              printf("1 秒内 mcycle 增加  cycles=");
              print_uint64(min64);
              printf("CPU 实际主频 ≈ %d MHz\n", min64 / 2000000ULL);
              min64 = 0;
      
      

      最后根据计数算出来的主频就在3M左右,很低,我怀疑时钟寄存器有什么地方忽略了什么配置。

      发布在 其它全志芯片讨论区
      L
      LiuQingchang
    • D1-h裸机下修改主频无效
      
      static void set_pll_cpux_axi(void)
      {
      	uint32_t val;
      
      	/* Select cpux clock src to osc24m, axi divide ratio is 3, system apb clk ratio is 4 */
      	//切换CPU时钟源
      	write32(D1_CCU_BASE + CCU_RISCV_CLK_REG, (0 << 24) | (3 << 8) | (1 << 0));
      	sdelay(1);
      
      	/* Disable pll gating */
      	//关PLL输出门
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val &= ~(1 << 27);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      
      	/* Enable pll ldo */
      	//使能PLL_LDO
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val |= (1 << 30);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      	sdelay(5);
      
      	/* Set default clk to 1008mhz */
      	//配置PLL_CPU倍频系数
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val &= ~((0x3 << 16) | (0xff << 8) | (0x3 << 0));
      	val |= (41 << 8);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      
      	/* Lock enable */
      	//PLL锁使能
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val |= (1 << 29);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      
      	/* Enable pll */
      	//使能PLL
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val |= (1 << 31);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      
      	/* Wait pll stable */
      	//等待PLL稳定
      	while(!(read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG) & (0x1 << 28)));
      	sdelay(20);
      
      	/* Enable pll gating */
      	//使能PLL输出门
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val |= (1 << 27);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      
      	/* Lock disable */
      	//关PLL锁
      	val = read32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG);
      	val &= ~(1 << 29);
      	write32(D1_CCU_BASE + CCU_PLL_CPU_CTRL_REG, val);
      	sdelay(1);
      
      	/* Set and change cpu clk src */
      	//切换时钟源为PLL_CPU
      	val = read32(D1_CCU_BASE + CCU_RISCV_CLK_REG);
      	val &= ~(0x07 << 24 | 0x3 << 8 | 0xf << 0);
      	val |= (0x05 << 24 | 0x1 << 8);
      	write32(D1_CCU_BASE + CCU_RISCV_CLK_REG, val);
      	sdelay(1);
      }
      

      这是我的修改主频函数

          while(1) {
              for (volatile uint32_t k = 0; k < 3000000; k++) {
                  __asm__("nop");
              }
              gpio_reverse(LIGHT_BLUE);        
      
          }
      

      这是测试函数,利用小灯翻转速度直观的。

      ★ CPU 频率测试程序 (LED + mcycle) ★
      RISCV_CLK_REG = 0x05000100
      PLL_CPU_CTRL = 0xCA002900
      CPU_AXI_CFG_REG = 0x00000300

      我在执行循环前打印出了三个寄存器内容,如上,内容修改成功,但是主频很低,大概3MHz,不管怎么修改寄存器内容或者修改时钟源都不行,都很低。
      有什么懂D1裸机主频配置流程的大佬指点一下,是否忽略了什么配置,谢谢。

      发布在 其它全志芯片讨论区
      L
      LiuQingchang
    • 求问:D1-H哪吒可以使用鸿蒙系统吗?

      求问:D1-H哪吒可以使用鸿蒙系统吗?

      发布在 编译和烧写问题专区
      L
      LiuQingchang
    • D1-H更换nand flash,型号是W25N04KVZEIR,烧录失败

      请问要怎么操作才行啊?求解答
      a4d0fe02-5b96-4acf-8d44-e3ea003458ce-image.png

      发布在 编译和烧写问题专区
      L
      LiuQingchang
    • D1移植鸿蒙,下载依赖出错

      使用的Ubuntu20.04,然后是参考https://gitee.com/allwinnertech-d1/device_sunxi链接,但是在我给鸿蒙下载依赖和工具的时候报错,大家帮我看下怎么解决吗?

      b09c3385-bff0-4be9-bd9c-71f3cb9d8d60-image.png

      发布在 编译和烧写问题专区
      L
      LiuQingchang
    • 回复: 哪吒开发板移植鸿蒙系统烧录遇到问题

      你好,我也是使用的Ubuntu20.04,然后也是参考https://gitee.com/allwinnertech-d1/device_sunxi链接,但是在我给鸿蒙下载依赖和工具的时候报错,你能帮我看下怎么解决吗?

      1bacae3e-bc00-44ec-aeef-81106cb88549-image.png

      发布在 编译和烧写问题专区
      L
      LiuQingchang
    • 回复: 苏州大学团队的RISC-V 裸机集成开发平台, 目前主要用于D1

      您好,我使用这款平台,使用他们给出的cpu主频调整构件,发现无法起作用,您有什么你思路吗?

      发布在 MR Series
      L
      LiuQingchang
    • 回复: D1-H芯片 repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml报错

      @shuaige 好的谢谢

      发布在 其它全志芯片讨论区
      L
      LiuQingchang