This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

USB驱动疑问:AM335x Starter Kit 开发板

Other Parts Discussed in Thread: AM3359

AM335x Starter Kit开发板上电后,用USB插到WindowsXP系统,提示要安装驱动。

上次深圳研讨会购买的AM335x Starter Kit开发板,只有两张SD卡,一张linux,另一张android,里面都没有找到关于USB驱动的东西。

TI支持说在卡里面有驱动,但是找了下,应该没有。

TI支持再发了一个过来,,双击安装,,大概提示 ”语言不支持,请此软件联系发行商“ 的错误就没法往下安装了。

TI支持叫我来这边问问。

AM335x Starter Kit开发板windows下的USB驱动在哪里下载?    我需要使用它的USB转串口。

上传了关于速度问题描述的附件

1 AM335X速度问题.doc
  • 另一个问题:

    手上使用的是英蓓特的Devkit8600 AM335X开发板,Devkit8600只提供了linux和android的开发板,,,没有裸机驱动,,我的程序是基于startWare里面的Starter Kit开发板修改开发的。

    Devkit8600外接了25M晶振,针对这个,程序已经做了改动。目前CAN、串口、USB虚拟串口、timer都正常跑起来了。

    但是测试发现,程序虽然能跑,执行速度却远达不到720M。执行i=720000,while(i--),按照720M粗略计算,大概1mS就执行完,实际上用了80多mS。

    这个跟什么关系较大呢?各个PLL初始化已经检查了几遍了,,跟电源管理芯片初始化有关系吗?

  • 这里有两个驱动,一个是转JTAG的驱动,这个装了最新的ccs 5.x就ok了,另一个是就是你说的USB 转串口的驱动,你看看这个里面的beagleboard.org/.../README.htm

  • 关于你的性能不够的问题,你看看你用的是不是最新的starterware,最好用最新的07版的,然后调用函数你可以搜索下工程里面的MMUConfigAndEnable() 函数,参照打开cache,尤其注意调用MMU_MEMTYPE_NORMAL_NON_SHAREABLE。

  • 怎么点击回复按钮没有任何反应?

    在这里回复一下 Yaoming Qin

    1、USB驱动问题,两个都安装不了,PC操作系统是windows XP professional 2002

    安装BONE_DRV.exe时,弹出设备驱动程序安装向导对话框:“设备驱动程序安装向导不支持当前的语言,请与向你提供此软件包的供应商联系。”

    安装BONE_D64.exe时,弹出BeagleBoard Drivers Archive:error对话框:“Error during execution ""dpinst.exe"". %1不是有效的Win32应用程序”。

    2、性能问题

    使用的是最新的AM335X_StarterWare_02_00_00_07

    在bootloader和应用程序都做过测试,其中bootloader在这个路径下:

    AM335X_StarterWare_02_00_00_07\build\armv7a\ewarm\am335x\evmskAM335x\bootloader,加了测试代码,测试结果跟应用层测试结果差不多慢。

    在应用层,main入口,已经调用了下面程序:

       /* Setup the MMU and do necessary MMU configurations. */

       MMUConfigAndEnable();

       /* Enable all levels of CACHE. */

       CacheEnable(CACHE_ALL);

    上面这两个程序没做任何改动,MMUConfigAndEnable函数里面对DDR3的设置如下:

       REGION regionDdr = {

                           MMU_PGTYPE_SECTION, START_ADDR_DDR, NUM_SECTIONS_DDR,

                           MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                        MMU_CACHE_WB_WA),

                           MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                           (unsigned int*)pageTable

                          };

    觉得性能问题,还不是这两个函数的原因,因为根据测试,CPU速度25M都没有远未达到啊

  • 怎么点击回复按钮没有任何反应?

    在这里回复一下 Yaoming Qin

    1、USB驱动问题,两个都安装不了,PC操作系统是windows XP professional 2002

    安装BONE_DRV.exe时,弹出设备驱动程序安装向导对话框:“设备驱动程序安装向导不支持当前的语言,请与向你提供此软件包的供应商联系。”

    安装BONE_D64.exe时,弹出BeagleBoard Drivers Archive:error对话框:“Error during execution ""dpinst.exe"". %1不是有效的Win32应用程序”。

    2、性能问题

    使用的是最新的AM335X_StarterWare_02_00_00_07

    在bootloader和应用程序都做过测试,其中bootloader在这个路径下:

    AM335X_StarterWare_02_00_00_07\build\armv7a\ewarm\am335x\evmskAM335x\bootloader,加了测试代码,测试结果跟应用层测试结果差不多慢。

    在应用层,main入口,已经调用了下面程序:

       /* Setup the MMU and do necessary MMU configurations. */

       MMUConfigAndEnable();

       /* Enable all levels of CACHE. */

       CacheEnable(CACHE_ALL);

    上面这两个程序没做任何改动,MMUConfigAndEnable函数里面对DDR3的设置如下:

       REGION regionDdr = {

                           MMU_PGTYPE_SECTION, START_ADDR_DDR, NUM_SECTIONS_DDR,

                           MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                        MMU_CACHE_WB_WA),

                           MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                           (unsigned int*)pageTable

                          };

    觉得性能问题,还不是这两个函数的原因,因为根据测试,CPU速度25M都没有远未达到啊

  • 怎么点击回复按钮没有任何反应?

    在这里回复一下 Yaoming Qin

    1、USB驱动问题,两个都安装不了,PC操作系统是windows XP professional 2002

    安装BONE_DRV.exe时,弹出设备驱动程序安装向导对话框:“设备驱动程序安装向导不支持当前的语言,请与向你提供此软件包的供应商联系。”

    安装BONE_D64.exe时,弹出BeagleBoard Drivers Archive:error对话框:“Error during execution ""dpinst.exe"". %1不是有效的Win32应用程序”。

    2、性能问题

    使用的是最新的AM335X_StarterWare_02_00_00_07

    在bootloader和应用程序都做过测试,其中bootloader在这个路径下:

    AM335X_StarterWare_02_00_00_07\build\armv7a\ewarm\am335x\evmskAM335x\bootloader,加了测试代码,测试结果跟应用层测试结果差不多慢。

    在应用层,main入口,已经调用了下面程序:

       /* Setup the MMU and do necessary MMU configurations. */

       MMUConfigAndEnable();

       /* Enable all levels of CACHE. */

       CacheEnable(CACHE_ALL);

    上面这两个程序没做任何改动,MMUConfigAndEnable函数里面对DDR3的设置如下:

       REGION regionDdr = {

                           MMU_PGTYPE_SECTION, START_ADDR_DDR, NUM_SECTIONS_DDR,

                           MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                        MMU_CACHE_WB_WA),

                           MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                           (unsigned int*)pageTable

                          };

    觉得性能问题,还不是这两个函数的原因,因为根据测试,CPU速度25M都没有远未达到啊

  • 很奇怪,点击回复,提示出错“服务器呈现故障,请稍后再试”,,刷新之后竟然一下子回了3次

    补充下:
    刚刚在同事电脑上面也尝试安装USB驱动,也是一样的问题。

  • 这个帖子很类似,也是速度问题啊,,有什么解决方法?

    AM335x (Beaglebone) execution speed.

    e2e.ti.com/.../177623.aspx

  • 搜集了关于速度慢的几个帖子

    am3359基于starterware的程序在DDR中运行的速度

    www.deyisupport.com/.../14682.aspx

    关于AM3359的内部中断(time out)响应

    www.deyisupport.com/.../8511.aspx

    AM3359 执行速度慢

    www.deyisupport.com/.../8607.aspx

    我们的情况:

    执行代码

    i=720000;

    while(i--);

    打开MMU和CACHE,速度只是从88mS下降到了66mS,,还是那么的慢啊

  • 一个是你可以用starterware里面带的gel文件设置下到720MHz,然后加上cache的设置,再测试下,另外,请问你的测试时间的原理是什么,我没看懂,有点怀疑其精确性

  • gel文件怎么用?我们使用的是IAR编译器,不是TI的CCS

    MPU PLL那一块完全是startWare的代码,没有任何改动,所以时钟是720M,如果不是,那应该是startWare的BUG

    在一楼附件《1 AM335X速度问题.doc》,是个测试过程的描述文档。

    测试方法大致就是:

    cnt = ReadTimer2(); //读取定时器初值

    TurnOnLed(); //打开LED

    i=720000;

    while(i--);

    TurnOffLed(); //关闭LED

    cnt = ReadTimer2() - cnt; //计算定时器计数长度

    根据cnt可以计算得到代码的执行时间,timer2直接是外接25M晶振作为时钟源的,跟PLL没有关系

    此外,根据LED的点亮和熄灭,可以用示波器测量LED点亮的时间,这是第二种测量方法,也可以证明第一种方法是否有误。

  • 现在发现的现象时,使能CACHE之后,程序运行很奇怪,比如,定时器初始化的值写不进去

    在CPU_TS_TmrInit()函数内部,下面几句初始化TCLR寄存器为47,时钟分频值16,自动重载模式,启动定时器。

    DMTimerPreScalerClkEnable(SOC_DMTIMER_2_REGS, DMTIMER_PRESCALER_CLK_DIV_BY_16);

    DMTimerModeConfigure(SOC_DMTIMER_2_REGS, DMTIMER_AUTORLD_NOCMP_ENABLE);

    DMTimerEnable(SOC_DMTIMER_2_REGS);

    ---------------------------------------------------测试程序---------------------------------------

    void main(void)

    {

       unsigned int num1,num2,cnt;

       /* Setup the MMU and do necessary MMU configurations. */

       MMUConfigAndEnable();

       /* Enable all levels of CACHE. */

       CacheEnable(CACHE_ALL);

       CPU_TS_TmrInit(); //定时器2初始化,24M时钟,自动重载模式

       UARTStdioInit(); //串口初始化

           cnt = 720000;

           num1 = CPU_TS_TmrRd();

           while(cnt--);

           num2 = CPU_TS_TmrRd();

           UARTPuts("num2 - num1 - ", -1);

           UARTPutNum(num2 - num1);

           UARTPuts("\n\r", -1);

           UARTPuts("contextPtr->tclr - ", -1);

           cnt = HWREG(SOC_DMTIMER_2_REGS + DMTIMER_TCLR);

           UARTPutNum(cnt);

           UARTPuts("\n\r", -1);

    }

    ---------------------------------------------------测试结果---------------------------------------

    -----------使能MMU和CACHE

    MMUConfigAndEnable();

    CacheEnable(CACHE_ALL);

    -----------超级终端运行结果:    程序cnt = 720000; while(cnt--);执行时间4mS左右,正常,但是读取的TCLR值为45,与写入的不一致,自动重载bit未写入。

    num2 - num1 - 6001

    contextPtr->tclr - 45

    -----------屏蔽MMU和CACHE

    -----------超级终端运行结果:    程序cnt = 720000; while(cnt--);执行时间204mS左右,很慢,读取的TCLR值为47,与写入的一致

    num2 - num1 - 306212

    contextPtr->tclr - 47

  • 有一点值得说明下,SRAM不是cacheable的,所以,你还是在app里面进行测试,不要再boot loader里面进行测试了

  • 刚才可能没说清,是片上ram不是 cacheable的

  • 谢谢!

    这个是在应用层测试的啊,用的是ti的evm开发板的串口例子,(由于Starter Kit的USB驱动安装出错,现在拿了EVM做测试)

    AM335X_StarterWare_02_00_00_07\examples\evmAM335x\uart

    至于MMU配置那一块代码,完全是StarterWare_02_00_00_07原来的代码,没有做任何改动的。

    内部SRAM能不能CACHE问题,下面是截取自StarterWare_02_00_00_07对内部SRAM的MMU设置,其注释说了,是跟DDR的设置一模一样的。

    如果内部SRAM不能CACHE,,那TI为什么在程序里面设置成CACHE了呢?

       /*

       ** Define OCMC RAM region of AM335x. Same Attributes of DDR region given.

       */

       REGION regionOcmc = {

                            MMU_PGTYPE_SECTION, START_ADDR_OCMC, NUM_SECTIONS_OCMC,

                            MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                         MMU_CACHE_WB_WA),

                            MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                            (unsigned int*)pageTable

                           };

  • 谢谢!

    这个是在应用层测试的啊,用的是ti的evm开发板的串口例子,(由于Starter Kit的USB驱动安装出错,现在拿了EVM做测试)

    AM335X_StarterWare_02_00_00_07\examples\evmAM335x\uart

    至于MMU配置那一块代码,完全是StarterWare_02_00_00_07原来的代码,没有做任何改动的。

    内部SRAM能不能CACHE问题,下面是截取自StarterWare_02_00_00_07对内部SRAM的MMU设置,其注释说了,是跟DDR的设置一模一样的。

    如果内部SRAM不能CACHE,,那TI为什么在程序里面设置成CACHE了呢?

       /*

       ** Define OCMC RAM region of AM335x. Same Attributes of DDR region given.

       */

       REGION regionOcmc = {

                            MMU_PGTYPE_SECTION, START_ADDR_OCMC, NUM_SECTIONS_OCMC,

                            MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                         MMU_CACHE_WB_WA),

                            MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                            (unsigned int*)pageTable

                           };

  • 在starterekit里面,没什么应用层之分,基本都是在超级用户模式下工作,我觉得你可以在ddr里面试试,多测几次,第一次测的可能不准确,因为会load 到cache中去

  • 我自己也在evm板上搭建环境,这两天我也跑个结果看看,如果方便,你把你的测试代码也贴上来

  • 我所说的应用层,指的是用户程序,跟引导程序相对。

    我的测试程序是运行在DDR里面的,首先通过串口下载引导程序,引导程序运行在内部SRAM,初始化PLL和DDR,然后引导程序再从串口下载用户程序,用户程序运行在DDR,在这里,用户程序就是测试程序。

    使用的是IAR6.40编译器,没用过TI的CCS编译器。

    引导程序工程路径

    E:\AM335X_StarterWare_02_00_00_07\build\armv7a\ewarm\am335x\evmAM335x\bootloader

    测试程序工程路径:

    E:\AM335X_StarterWare_02_00_00_07\build\armv7a\ewarm\am335x\evmAM335x\uart

    测试程序源文件路径如下:

    E:\AM335X_StarterWare_02_00_00_07\examples\evmAM335x\uart\uartEcho.c

    uartEcho.c的内容:

    /**

    * \file   uartEcho.c

    */

    #include "soc_AM335x.h"

    #include "evmAM335x.h"

    #include "dmtimer.h"

    #include "mmu.h"

    #include "cache.h"

    //测量定时器初始化

    void  CPU_TS_TmrInit(void)

    {

       /* This function will enable clocks for the DMTimer2 instance */

       DMTimer2ModuleClkConfig();

       /* Load the counter with the initial count value */

       DMTimerCounterSet(SOC_DMTIMER_2_REGS, 0);

       /* Load the load register with the reload count value */

       DMTimerReloadSet(SOC_DMTIMER_2_REGS, 0);

       DMTimerPreScalerClkEnable(SOC_DMTIMER_2_REGS, DMTIMER_PRESCALER_CLK_DIV_BY_16);

       //DMTimerPreScalerClkDisable(SOC_DMTIMER_2_REGS);

       /* Configure the DMTimer for only Auto-reload mode */

       DMTimerModeConfigure(SOC_DMTIMER_2_REGS, DMTIMER_AUTORLD_NOCMP_ENABLE);

       /* Start the DMTimer */

       DMTimerEnable(SOC_DMTIMER_2_REGS);

    }

    //读取定时器计数值

    unsigned int  CPU_TS_TmrRd(void)

    {

       return DMTimerCounterGet(SOC_DMTIMER_2_REGS);

    }

    /****************************************************************************/

    /*                           MMU单元设置                                    */

    /****************************************************************************/

    #define START_ADDR_DDR             (0x80000000)

    #define START_ADDR_DEV             (0x44000000)

    #define START_ADDR_OCMC            (0x40300000)

    #define NUM_SECTIONS_DDR           (512)

    #define NUM_SECTIONS_DEV           (960)

    #define NUM_SECTIONS_OCMC          (1)

    /* page tables start must be aligned in 16K boundary */

    #ifdef __TMS470__

    #pragma DATA_ALIGN(pageTable, 16384);

    static volatile unsigned int pageTable[4*1024];

    #elif defined(__IAR_SYSTEMS_ICC__)

    #pragma data_alignment=16384

    static volatile unsigned int pageTable[4*1024];

    #else

    static volatile unsigned int pageTable[4*1024] __attribute__((aligned(16*1024)));

    #endif

    /*

    ** Function to setup MMU. This function Maps three regions ( 1. DDR

    ** 2. OCMC and 3. Device memory) and enables MMU.

    */

    void MMUConfigAndEnable(void)

    {

       /*

       ** Define DDR memory region of AM335x. DDR can be configured as Normal

       ** memory with R/W access in user/privileged modes. The cache attributes

       ** specified here are,

       ** Inner - Write through, No Write Allocate

       ** Outer - Write Back, Write Allocate

       */

       REGION regionDdr = {

                           MMU_PGTYPE_SECTION, START_ADDR_DDR, NUM_SECTIONS_DDR,

                           MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                            MMU_CACHE_WB_WA),

                           MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                           (unsigned int*)pageTable

                          };

       /*

       ** Define OCMC RAM region of AM335x. Same Attributes of DDR region given.

       */

       REGION regionOcmc = {

                            MMU_PGTYPE_SECTION, START_ADDR_OCMC, NUM_SECTIONS_OCMC,

                            MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,

                                                             MMU_CACHE_WB_WA),

                            MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,

                            (unsigned int*)pageTable

                           };

       /*

       ** Define Device Memory Region. The region between OCMC and DDR is

       ** configured as device memory, with R/W access in user/privileged modes.

       ** Also, the region is marked 'Execute Never'.

       */

       REGION regionDev = {

                           MMU_PGTYPE_SECTION, START_ADDR_DEV, NUM_SECTIONS_DEV,

                           MMU_MEMTYPE_DEVICE_SHAREABLE,

                           MMU_REGION_NON_SECURE,

                           MMU_AP_PRV_RW_USR_RW  | MMU_SECTION_EXEC_NEVER,

                           (unsigned int*)pageTable

                          };

       /* Initialize the page table and MMU */

       MMUInit((unsigned int*)pageTable);

       /* Map the defined regions */

       MMUMemRegionMap(&regionDdr);

       MMUMemRegionMap(&regionOcmc);

       MMUMemRegionMap(&regionDev);

       /* Now Safe to enable MMU */

       MMUEnable((unsigned int*)pageTable);

    }

    int main()

    {

       unsigned int num1,num2,cnt;

       //存储器管理单元初始化

       /* Setup the MMU and do necessary MMU configurations. */

       MMUConfigAndEnable();

       /* Enable all levels of CACHE. */

       CacheEnable(CACHE_ALL);

       CPU_TS_TmrInit();

       UARTStdioInit();

       while(1)

       {  

           cnt = 720000;

           num1 = CPU_TS_TmrRd();

           while(cnt--);

           num2 = CPU_TS_TmrRd();

           UARTPuts("num2 - num1 - ", -1);

           UARTPutNum(num2 - num1);

           UARTPuts("\n\r", -1);

           UARTPuts("DMTimer2 TCLR is - ", -1);

           cnt = HWREG(SOC_DMTIMER_2_REGS + DMTIMER_TCLR);

           UARTPutNum(cnt);

           UARTPuts("\n\r", -1);

       }

       while(1);

    }

    /******************************* End of file *********************************/

  • 我目前跑了下,结果如下:

    DMTimer2 TCLR is - 45

    num2 - num1 - 1

    DMTimer2 TCLR is - 45

    num2 - num1 - 1

    DMTimer2 TCLR is - 45

    num2 - num1 - 0

    DMTimer2 TCLR is - 45

    num2 - num1 - 0

    DMTimer2 TCLR is - 45

    num2 - num1 - 1

    DMTimer2 TCLR is - 45

    我在进一步分析。

  • 谢谢

    如果屏蔽MMU和CACHE,读的值就是正确值47,

    MMU部分代码是AM335X_StarterWare_02_00_00_07其他例程拷贝过来的,没做任何改动。

    有点奇怪,你的代码运行时间测试结果是

    num2 - num1 - 1

    我的是num2 - num1 - 6001,

    是cnt = 720000; while(cnt--);的执行时间。

    大致结果是16/24M*6001=4mS

  • 我就是拿你的代码在07 release下跑的,我没有做修改。另外,你是拿debug测的还是release测的,这两个的区别也很大

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 我用的是debug,刚刚用release,结果是一样的

    定时器时钟分频为16,每计数一次的时间大概是666.6nS

    这段代码cnt=720000,while(cnt--);在我这边生成了4条汇编指令,按照720时钟运行,怎么说也是4mS左右

    也就是说num2 - num1大概是6000左右。

    你那边,DMTimer2 TCLR is - 45,得出定时器分频为16,evm开发板外接晶振为24M,num2 - num1为1,应该不对啊,跟实际理论计算差距太大了吧

  • 知道上述测试结果不同的原因了

    我用的优化等级是low

    当用了最高等级时,运行结果跟你的一样,num2 - num1 为 1。

  • 知道上述测试结果不同的原因了

    我用的优化等级是low

    当用了最高等级时,运行结果跟你的一样,num2 - num1 为 1。

  • 知道上述测试结果不同的原因了

    我用的优化等级是low

    当用了最高等级时,运行结果跟你的一样,num2 - num1 为 1。

  • OK,用CCS或者GCC默认的优化都是开的。

  • 研究了cortex-v7体系结构手册,找到了一个解决方法

    将芯片外设寄存器区域存储器类型,从device类型改为Strongly ordered类型

    cpu速度和读写寄存器都正常了

  • 研究了cortex-v7体系结构手册,找到了一个解决方法

    将芯片外设寄存器区域存储器类型,从device类型改为Strongly ordered类型

    cpu速度和读写寄存器都正常了

  • 研究了cortex-v7体系结构手册,找到了一个解决方法

    将芯片外设寄存器区域存储器类型,从device类型改为Strongly ordered类型

    cpu速度和读写寄存器都正常了

  • 请问一下

    TI提供的startware,里面有好几个demo都是打开MMU和CACHE的,运行的正确性验证过了吗?

    就拿我这个例子来说,定时器的TCLR为什么只写进去一部分?

    而且不同的板子还不一样,在evm板写47读出45,在英蓓特开发板写47读出1。

    其实贴上来的程序,只是为了说明问题,已经做成最精简了的,,实际的程序还用到了DMTimer_1mS、Uart、GPIO、USB virtual Sserial Port等等外设。

    这里就有个问题:为什么其他外设初始化的对了呢? 单单DMTimer初始化的有问题? 还是其他外设可能也会有问题,只是刚好没有暴露出来?

    希望Yaoming Qin给出TI的解决方法,同时也分析这帖子所反映问题的原因是什么?

    thanks u!

  • 关于寄存器的读写,我测了下,没有问题。