标签: omap

对齐和未对齐的内存访问?

对齐和未对齐的内存访问有什么区别?

我在TMS320C64x DSP上工作,我想使用内部函数(汇编指令的C函数),它有

ushort & _amem2(void *ptr);
ushort & _mem2(void *ptr);
Run Code Online (Sandbox Code Playgroud)

_amem22字节的对齐访问在哪里进行_mem2未对齐访问.

我什么时候应该使用哪个?

c c++ memory memory-alignment omap

18
推荐指数
4
解决办法
2万
查看次数

Hello world,裸机Beagleboard

我正试图在我的Beagleboard-xm rev上运行一个'hello world'类型的程序.C,通过puts从程序集中调用C 函数.

到目前为止,我一直在使用它作为参考:http://wiki.osdev.org/ARM_Beagleboard

这是我到目前为止所拥有的,但没有输出.

你好ç

volatile unsigned int * const UART3DR = (unsigned int *)0x49020000;

void puts(const char *s) {
  while(*s != '\0') { 
    *UART3DR = (unsigned int)(*s); 
    s++; 
  }
}

void hello() {
  puts("Hello, Beagleboard!\n");
}
Run Code Online (Sandbox Code Playgroud)

boot.asm

.global start
start:
   ldr sp, =stack_bottom
   bl hello
   b .
Run Code Online (Sandbox Code Playgroud)

linker.ld

ENTRY(start)

MEMORY
{
    ram : ORIGIN = 0x80200000, LENGTH = 0x10000
}

SECTIONS
{
    .hello : { hello.o(.text) } > ram
    .text : { …
Run Code Online (Sandbox Code Playgroud)

c arm omap beagleboard

10
推荐指数
1
解决办法
6354
查看次数

我的硬件上的time.h clock()坏了吗?

我尝试测量在OMAP ZOOM 3430 MDK附带的TMS32064x + DSP上执行一段代码所需的时钟周期.我看一下DSP芯片的"程序员指南",它说DSP支持clock()功能.

我做的很简单,我就是这么做的

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;
Run Code Online (Sandbox Code Playgroud)

然后将"start","stop"和"total"的值放入以前使用ARM处理器分配的共享内存中.然后我只是将它打印到ARM端的屏幕上.

问题是,在我第一次执行时,我总是得到相同的"总"值,然后在我的下一次运行中我总是得到0!"开始"和"停止"值与"总"值一起出现.

最奇怪的是他们似乎遵循了一点点模式!我把输出结果如下:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9
Run Code Online (Sandbox Code Playgroud)

显然,clock()运行不正常,但我不确定这是因为我做错了什么,还是因为我的硬件不支持这种类型的东西.任何想法为什么会这样?

c c++ embedded clock omap

7
推荐指数
1
解决办法
1767
查看次数

AM335x看门狗不起作用

我目前正在研发TI AM335x主板(入门套件),我想让OMAP看门狗工作......

据我所知,平台在启动时会自动启用看门狗,我认为在启动时打印出的以下消息可以确认:

[    1.510192] OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
Run Code Online (Sandbox Code Playgroud)

如果我在这一点上没有错,如果我发出以下命令:

echo 0 > /dev/watchdog
Run Code Online (Sandbox Code Playgroud)

董事会应该在60秒内重启,不是吗?相反,60秒后没有任何反应......为什么?我错过了与此相关的内容吗?有谁能够帮我?

watchdog omap embedded-linux texas-instruments cortex-a8

6
推荐指数
1
解决办法
2278
查看次数

如何使用DSP加速OMAP上的代码?

我正在为OMAP3430开发视频编解码器.我已经有用C++编写的代码,我尝试修改/移植它的某些部分以利用DSP(SDK(OMAP ZOOM3430 SDK)我有一个额外的DSP).

我尝试移植一个小的for循环,它运行的是非常少量的数据(~250字节),但是在不同的数据上大约需要2M次.但CPU和DSP之间通信的过载远远超过增益(如果我有的话).

我认为这个任务就像在普通计算机中优化GPU的代码一样.我的问题是移植什么样的部件会有益?GPU程序员如何处理这些任务?

编辑:

  1. GPP应用程序分配大小为0x1000字节的缓冲区.
  2. GPP应用程序调用DSPProcessor_ReserveMemory为每个分配的缓冲区保留DSP虚拟地址空间,使用比分配的缓冲区大4K的大小来考虑自动页面对齐.总预留大小也必须沿4K页面边界对齐.
  3. GPP应用程序调用DSPProcessor_Map将每个分配的缓冲区映射到上一步中保留的DSP虚拟地址空间.
  4. GPP应用程序准备一条消息,通知DSP执行阶段虚拟地址空间的基地址,该地址已映射到GPP上分配的缓冲区.GPP应用程序使用DSPNode_PutMessage将消息发送到DSP.
  5. GPP调用memcpy将要处理的数据复制到共享内存中.
  6. GPP应用程序调用DSPProcessor_FlushMemory以确保已刷新数据高速缓存.
  7. GPP应用程序准备一条消息,通知DSP执行阶段已完成写入缓冲区,DSP现在可以访问缓冲区.该消息还包含写入缓冲区的数据量,以便DSP知道要复制的数据量.GPP使用DSPNode_PutMessage将消息发送到DSP,然后调用DSPNode_GetMessage等待从DSP收回消息.

在这些之后,DSP程序的执行开始,并且DSP在完成处理时通过消息通知GPP.只是为了尝试我不在DSP程序中进行任何处理.我只是将"处理完成"消息发送回GPP.这仍然需要耗费大量时间.可能是因为内部/外部内存使用,还是因为通信过载?

c c++ embedded signal-processing omap

6
推荐指数
1
解决办法
5974
查看次数

如何编写显示驱动程序

我正在为微型oled编写显示驱动程序.board是dart4460(omap4460),提供dss(显示子系统).所以我正在使用dss编写驱动程序.

但我不知道我写的是对还是不对

oled display使用dpi接口和i2c命令

我提到了使用dpi和i2c的pico dlp投影机驱动源.

这是数据表

dart4460:http://www.variscite.com/images/DART-4460-DS_107.pdf

微显示器:https://www.dropbox.com/s/ixpws4qzo3ttj6e/SVGA050.pdf dl = 0

码:

面板svga.c

#define SLAVE_ADDR_READ     0x1F
#define SLAVW_ADDR_WRITE    0x1E

struct svga050_i2c_data {
struct mutex xfer_lock;
};

struct svga050_data {
struct i2c_client *client;
struct mutex lock;
};

static struct i2c_board_info svga050_i2c_board_info = {
I2C_BOARD_INFO("svga050_i2c_drive",SLAVE_ADDR_WRITE);
}

static struct omap_video_timings svga050_timings = {
   .x_res = 800,
   .y_res = 600,

   .pixel_clock = 40000,

   .hsw     = 128,
   .hfp     = 40,
   .hbp     = 88,

   .vsw     = 4,
   .vfp     = 1, …
Run Code Online (Sandbox Code Playgroud)

driver i2c omap linux-device-driver

6
推荐指数
0
解决办法
580
查看次数

由ARM Cortex-A9构成的SoC的典型L1和L2访问延迟

我正在寻找由ARM Cortex-A9处理器(如具有多个ARM A9处理器的Nvidia Tegra 2和Tegra 3)制造的SoC的L1访问延迟和L2访问延迟.

我可以找到一些关于这些架构的L1和L2大小的信息,但我对L1和L2访问延迟的信息不多.我发现的唯一可靠信息是"在Tegra 3上L2缓存延迟比2缓存2个周期快,而L1缓存延迟没有改变."

这里提到Tegra 2上的L2具有25个周期的延迟,并且这里提到L1具有4个周期的延迟并且L2具有31到55个周期的延迟.这些参考文献都不是完全可靠的.我希望能找到有关Nvidia,TI和Qualcomm网站和技术文档的更多信息,但没有成功.

编辑:OMAP4460和OMAP4470等类似SoC的信息也很棒.

arm omap cpu-cache tegra

5
推荐指数
1
解决办法
2523
查看次数

配置minicom以使用硬件流控制

寻找一些帮助来测试具有OMAP L138的硬件流控制的UART实现。为了测试实现,我使用minicom了模拟串行链接的另一端的方法,并且正在寻找一些有关如何配置它的见解。

我有一个简单的应用程序,它通过UART将消息从OMAP发送到minicom。如果OMAP和minicom均配置为不使用硬件流控制,则此操作将按预期进行。当我打开硬件流控制时,在minicom上看不到任何输出。

这是我遵循的步骤列表:

  • 将minicom配置为使用硬件流控制(Ctl AO打开minicom串行端口设置菜单,并按F启用硬件流控制)。
  • 使用stty我启用rts / cts握手stty -F /dev/ttyS1 crtscts。使用命令,stty -F /dev/ttyS1 -a我可以确认已启用crtscts。

上面的两个更改确保在终端程序和UART驱动程序中启用了硬件流控制。OMAP上的UART也已配置为使用硬件流控制。

但是,上面列出的对minicom的更改似乎不足以使流量控制正常工作。启动应用程序后,来自OMAP的RTS(发送请求)信号变低,从而向minicom指示它要发送数据。如果配置正确,minicom应将OMAP的CTS(清除发送)信号拉低,并开始接受数据,直到达到指定的接收缓冲区阈值为止。这不会发生。OMAP的CTS输入始终为高。只是为了踢一下,我尝试在OMAP和voila上将RTS与CTS短路,期望的消息确实会在minicom上显示!这是一张图像,显示了两者如何连接。

Omap与Minicom的连接

从我的尝试来看,好像我在配置minicom的方式中缺少了一些东西。任何建议表示赞赏。

hardware embedded omap flow-control uart

5
推荐指数
1
解决办法
1万
查看次数

GPIO irq:下降沿和上升沿检测

我尝试为基于 TI am335x SoC 的电路板创建裸机应用程序。我需要做的一件事是callback1在上升沿和callback2下降沿调用。从我发现的数据表中,可以通过写入1 << pinRISINGDETECT 和 FALLINGDETECT GPIO 寄存器来启用对上升沿和下降沿的同时检测。但是,我不明白(在数据表中没有看到它的迹象),我如何确定当前出现的中断是由 GPIO 的上升沿还是下降沿引起的?

embedded arm irq omap gpio

3
推荐指数
1
解决办法
1181
查看次数

Intel原子或ARM用于繁重的信号处理工作量

我想知道哪个更好(性能)选项:

  1. 获得基于英特尔双核心原子的电路板
  2. 获得基于Arm cortex A9的板(pandaboard等)

我想运行一些轻量级的linux并进行一些非常密集的计算,如图像/视频处理(可能是以后的3D),也可以处理它们上的音频.当然所有的浮点数学.

arm intel-atom omap ti-dsp

2
推荐指数
1
解决办法
642
查看次数