LPC43xx SGPIO Configuration -- Why not use GPDMA ?
LPC43xx SGPIO Configuration
The LPC43xx SGPIO peripheral is used to move samples between USB and the ADC/DAC chip (MAX5864).
The SGPIO is a peripheral that has a bunch of 32-bit shift registers.
These shift registers can be configured to act as a parallel interface of different widths.
For HackRF, we configure the SGPIO to transfer eight bits at a time.
The SGPIO interface can also accept an external clock, which we use to synchronize transfers with the sample clock.
In the current HackRF design, there is a CPLD which manages the interface between the MAX5864 and the SGPIO interface.
There are four SGPIO signals that control the SGPIO data transfer:
- Clock: Determines when a value on the SGPIO data bus is transferred.
- Direction: Determines whether the MAX5864 DA (ADC) data is driven onto the SGPIO lines,
or if the SGPIO lines drive the data bus with data for the MAX5864 DD (DAC) signals. - Data Valid: Indicates a sample on the SGPIO data bus is valid data.
- Transfer Enable: Allows SGPIO to synchronize with the I/Q data stream.
The MAX5864 produces/consumes two values (quadrature/complex value) per sample period -- an I value and a Q value.
These two values are multiplexed on the SGPIO lines. This signal suspends data valid until the I value should be transferred.
Frequently Asked Questions
Why not use GPDMA to transfer samples through SGPIO?
It would be great if we could, as that would free up lots of processor time.
Unfortunately, the GPDMA scheme in the LPC43xx does not seem to support
peripheral-to-memory and memory-to-peripheral transfers with the SGPIO peripheral.
You might observe that the SGPIO peripheral can generate requests from SGPIO14 and SGPIO15,
using an arbitrary bit pattern in the slice shift register.
The pattern in the slice determines the request interval.
That's a good start.
However, how do you specify which SGPIO shadow registers are read/written at each request,
and in which order those registers are transferred with memory?
It turns out you can't.
In fact, it appears that an SGPIO request doesn't cause any transfer at all, if your source or destination is "peripheral".
Instead, the SGPIO request is intended to perform a memory-to-memory transfer synchronized with SGPIO.
But you're on your own as far as getting data to/from the SGPIO shadow registers.
I believe this is why the SGPIO camera example in the user manual describes an SGPIO interrupt doing the SGPIO shadow register transfer,
and the GPDMA doing moves from one block of RAM to another.
Perhaps if we transfer only one SGPIO shadow register, using memory-to-memory?
Then we don't have to worry about the order of SGPIO registers, or which ones need to be transferred.
It turns out that when you switch over to memory-to-memory transfers, you lose peripheral request generation.
So the GPDMA will transfer as fast as possible -- far faster than words are produced/consumed by SGPIO.
I'd really love to be wrong about all this, but all my testing has indicated there's no workable solution
to using GPDMA that's any better than using SGPIO interrupts to transfer samples.
If you want some sample GPDMA code to experiment with, please contact Jared (sharebrained on freenode #hackrf).
LPC43xx SGPIO Configuration -- Why not use GPDMA ?的更多相关文章
- LPC43xx SGPIO Experimentation
LPC4350 SGPIO Experimentation The NXP LPC43xx microcontrollers have an interesting, programmable ser ...
- LPC43xx SGPIO I2C Implementation
I²C SGPIO Configuration SGPIO is a hardware feature of LPC4300 series. There are 16 SGPIO pins calle ...
- LPC43xx SGPIO DMA and Interrupts
The SGPIO output pins SGPIO14 and SGPIO15 can trigger a GPDMA request SGPIO pins SGPIO14 and SGPIO15 ...
- LPC43xx SGPIO Slice 示意图
SGPIO inverted clock qualifier Hi, With bits 6:5 of SGPIO_MUX_CFG the QUALIFIER_MODE is selected (0x ...
- LPC43xx SGPIO Camera interface design
AN11196: Camera interface design using SGPIO
- LPC43xx SGPIO Pattern Match Mode
模式匹配 所有位串均具有模式匹配功能. 该功能可用于检测启动代码等.要使用该功能,则必须用需匹配的模式来对REG_SS 编程 (请注意, POS 达到零时 REG_SS 不会与 REG 交换!) M ...
- LPC43xx SGPIO Slice 输入输出连接表
- LPC43xx Dual-core or Multi-core configuration and JLink Debug
Test access port (TAP) JTAG defines a TAP (Test access port). The TAP is a general-purpose port that ...
- LPC18xx LPC43xx LPC4370 Bootrom USB DFU FPB - Flash Patch and Breakpoint Unit
What is the difference between a Bootrom vs bootloader on ARM systems Bootrom Bootrom (or Boot ROM) ...
随机推荐
- unbind()清除指定元素绑定效果
定义和用法 unbind() 方法移除被选元素的事件处理程序. 该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行. ubind() 适用于任何通过 jQuery 附加的事件 ...
- opacity设定图片透明度
实例 1 - 创建透明图像 定义透明效果的 CSS3 属性是 opacity. 首先,我们将展示如何通过 CSS 来创建透明图像. 常规图像: 带有透明度的相同图像: 请看下面的 CSS: img { ...
- 第6月第17天 CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
1. 为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准.所以所有的变化都由前两列完成. 以上参数在矩阵中 ...
- aps.net webform框架下页面服务器端控件和html控件用法
(1)select 下拉框 前端: <select name="gameserverlist" id="gameserverlist" runat=&qu ...
- 配置apache使用https访问
准备 yum install mod_ssl openssl 生成一个自签名证书 cd /etc/pki/CA 1.生成2048位的加密私钥 openssl genrsa -out server.ke ...
- rtop:一个通过 SSH 监控远程主机的交互式工具【转】
编译自: http://www.tecmint.com/rtop-monitor-remote-linux-server-over-ssh/ rtop[1] 是一个基于 SSH 的直接的交互式远程系统 ...
- Python学习四|变量、对象、引用的介绍
变量 变量创建:一个变量也就是变量名,就像a,当代码第一次赋值时就创建了它.之后的赋值将会改变已创建的变量名的值,从技术上讲,Python在代码运行之前先检测变量名,可以当成是最初的赋值创建了变量. ...
- Tesseract-OCR 3.05 多过语言文字识别(运行程序+中英日韩语言包)
最新版本 静态编译 tesseract 3.05.00dev leptonica-1.73 libgif 5.1.3 : libjpeg 8c : libpng 1.6.16 : libtiff 3. ...
- ASP.NET应用技巧:非托管COM组件的使用
众所周知,asp.net是基于通用语言运行库创建的,也就是所谓的托管执行环境.生成的代码称为托管代码.编译器能够从源代码的描述中产生元数据信息,而运行库又从元数据中获得托管代码的信息.而我们编写的组件 ...
- 2018-2019-2 网络对抗技术 20165301 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165301 Exp4 恶意代码分析 实验内容 系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分 ...