问题标签 [nxp-microcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - LPC810 - 为什么机器代码不会从闪存中的 uint8_t 数组执行?
我正在为 NXP LPC810 微控制器编写嵌入式 C/汇编代码(只是一个爱好项目)。
我有一个功能fn
。我还有一个该函数机器代码的精确副本,位于uint8_t
. (我已经检查了十六进制文件。)
我创建了一个函数指针fnptr
,其类型与fn
并使用强制转换将其指向数组。
这一切都在没有警告的情况下交叉编译。
当 MCU 执行fn
时,它工作正常。
当 MCU 执行fnptr
时它崩溃(我看不到任何调试,因为只有 8 个引脚,全部在使用中)。
代码与位置无关。
该数组具有正确的 4 字节对齐方式。
fn
在.text
elf文件的部分。
该数组被强制进入.text
elf 文件的部分(仍在闪存中,而不是 RAM)。
我假设在这样一个基本的 Coretex M0+ MCU 上没有类似 NX 的功能。(Cortex M3 和 M4 确实具有某种形式的代码只读存储器保护。)
数组中的机器码不起作用还有其他原因吗?
更新:
这是代码:
这是反汇编的输出arm-none-eabi-objdump -D -Mforce-thumb firmware.elf
:
c - 5 年后 - 恩智浦 ADC 无法正常工作
前段时间我试图在 NXP 的 LPC3143 上对 ADC 进行编程,但没有成功。现在 5 年后,我给自己买了一块LPC4088 快速启动板并用 LPC4088 试用。同样的问题仍然存在于 ADC 中!当 I/O 配置、GPIO、定时器和 PWM 像魅力一样工作时,我似乎无法让它工作......
我总是通过阅读用户手册对 MCU 进行编程。因此,在阅读手册后,这是我想出的:
LPC4088-ioconfig.h
LPC4088-system.h
LPC4088-gpio.h
LPC4088-adc.h
主程序
这里还有 LPC4088 快速启动板更详细的接口说明——我的外部电位器输出连接到 P1.31,而 LED 已经嵌入到板上:
smartcard - JCOP 卡中的安全盒
11-12页
安全盒概念在 JCOP 2.4.2 R3 中实现。Secure Box 是一种允许运行未经认证的第三方本地代码并确保该代码不会损害、影响或操纵 JCOP 2.4.2 R3 操作系统或操作系统执行的任何小程序的结构。硬件 MMU 确保安全盒中的其他代码和/或驻留在硬件上的数据的本机代码已在硬件评估中获得认证
我有一些描述的卡,我也想有使用安全盒的经验!在Java Card v3.0.1 Specifications、Global Platform v2.2.1 card specification和JCOP v2.4.2 r3 Administrator Manual中搜索没有帮助。上述文件中几乎没有关于 Secure Box 的内容。
所以 :
有人知道如何在 JCOP 卡中使用安全盒吗?我们可以在 Secure Box 中上传什么样的程序/代码?这些程序是用 Java Card 语言编写的并且也是 CAP 文件的形式吗?或者那些是用 C++ 或汇编编写的?
如何上传并安装在卡上?而这个安全盒有什么优势呢?
c - ARM interrupts from the beginning (Cortex-M4)
I am dealing with a new microcontroller LPC4088 from NXP. I needed 2 weeks to study and write a working examples for peripherals: IOCONFIG, GPIO, TIMERS, PWM and ADC. Please take a look at my repositories here. This is how you will get a feeling for how I work and what my skill level is.
Until now I could simply disable interrupts and work without them. Now I want to deal with UART peripheral device which needs interrupts. I have never programmed interupts but know something about ARM interrupts. Sadly just in theory. Currently I am studying these two documents:
- LPC4088 user guide (NVIC p.80 & UART1 p.461),
- Cortex-M4 devices generic user manual
It became clear to me that I need to study ARM Cortex-M4 microprocessor besides the LPC4088 microcontroller which I got the hang of somehow. I know that I should put ARM exception vectors at the beginning of the program - usually in the startup code. But I don't know how to do this because what I got with the microcontroller is already compiled startup code (object file) which presumably defines exception vectors, reset handler which sets stacks for C and then jumps to function main() in C source code written by user.
After compilation of my programs using GCC ARM compiler I allways get this prompt, which must allso be the clue which I don't understand because of my inexperience with ARM mcpu's directly:
I was thinking of reverse ingeneering the startup code using the Segger Jlink and fixing the exception vectors there, but there must be any other way besides writing my own open source startup code... So do you have any suggestions or examples which would be even better for me.
ADD: I really looked hard and got no source code for the startup code. This is what I got:
The only way to somehow manipulate vectors therefore must be hidden inside the linker script, which is the only part that is still a source code and it looks like this:
There is allso a makefile which looks like this and is contributing the prompt that I get at the end of every compilation:
camera - 通过 I2C 到 NXP LPC1768 微控制器的 OV2640 相机模块?
我是嵌入式的新手,甚至是相机传感器的新手——请多多包涵。我正在尝试连接 OV2640 相机模块(OV2640 数据表,带分线板的模块)。所以我连接了以下内容:
- OV2640 - LPC1768
- 地线------- p1(地线)
- VCC ------- p40 (Vout - 3.3V)
- SDA -------- p28 (I2C SDA)
- SCL -------- p27 (I2C SCL)
我试图让它通过SCCB工作,这就是连接 I2C 的原因。但似乎我无法正确设置。
这是我现在拥有的代码:
我无法通过 I2C 写入或读取 - 我在这里做错了什么?
另外,相信 XCLK 需要绑定到 OV2640 模块,如何从 LPC1768 微控制器完成?
arm - LPC2148 ISP 在刷入 hex 文件后不工作
我是 ARM 编程新手,从 NXP 的 LPC2148 芯片开始。我正在使用它的片上 ISP UART 引导加载程序。加载在 9600 波特、8 位甚至奇偶校验下完美运行。
然后我通过 Flash Magic 固件以 14400 波特刷新了一个由 LPCXpresso 上的新项目制作的代码。之后,引导加载程序序列不再起作用。我已经用奇偶校验尝试了所有可能的波特率,但它不再起作用了。出现“Autobaud failed”的常见问题,奇怪的是,当电源打开时,芯片正在升温。
最让我头疼的问题是我是否破坏了 ISP 引导加载程序。
PS。我一直在使用 16MHz 晶体。虽然我插入的代码实际上是为 12MHz 晶体制作的,其 PLL 调整为 5 倍(60MHz)。但是引导加载程序初始化序列应该绕过芯片上的正常代码,不是吗?
请帮我
emulation - 是否可以使用 MCU+PN544C3 运行 HCE?
我们现在正在开发一种使用 MCU 通过 UART 控制 PN544C3 的设备。该设备现在可以在 SWP SIM 卡仿真、读卡器和 P2P 模式下工作。我们现在正在考虑是否可以在此设备上运行 HCE。大多数文章都在讨论 Android 上的 HCE。很难找到任何讨论在 MCU 上运行 HCE 的文档。对这个想法有什么建议吗?
我们可以在用户手册中找到 PN544C3 有一些包含 HCE 选项的 AID 路由配置。
c++ - 错误:未在此范围内声明 aes_setkey
我正在尝试使用 gcc4mbed 离线编译器为 mbed LPC1768 微控制器编译 mbedtls。
我想获得一个基本的 AESCBC 加密和解密示例来学习;我不确定我是否缺少包含或者我没有正确实例化。错误:
error: 'aes_setkey' was not declared in this scope
我正在知识库中的本指南中工作:知识库
代码:
gcc - 为什么不执行对内存映射外设寄存器的写入 (LPC43xx)?
我正在为 NXP LPC4330(Arm Cortex M0/M4 双核)构建一个应用程序。我正在使用 arm-none-eabi-gcc 4.9.3 进行编译。在我的代码中,我正在执行对(32 位)内存位置的写入。紧接着,如果我从那个内存位置读回,大约十分之一的结果表明没有发生写入。稍后的后续读取指示相同的事情,因此它不是瞬态条件。中断在全局级别被禁用,并且编译器生成的汇编器显然正在尝试写入,那么写入没有被执行怎么可能呢?
具体来说,我正在写入 SLICE_MUX_CFG0,它是 SGPIO 外设中的内存映射寄存器。当写入工作时,外围功能正常。当回读指示写操作未完成时,外设无法正常工作。因此,如回读所示,相关寄存器的设置似乎不正确。
查看 .asm(如下所列),写的很清楚。当我之后读回该值时,它显示为零,这 - 鉴于下面的列表 - 在我看来是不可能的。如果我在写入之前立即执行读取(参见下面的 .c 列表),问题就会消失,这可能是一个线索。
所以上面说明了,什么?这是否违反了一些使用内存总线的规则?我查看了 GCC 错误列表,但看不到任何与此相关的内容。
下面的函数,包括源代码和 ASM,带有一些注释。可能会发生什么,这里?为什么以“存储价值”写入显然没有任何效果?
编译成上面的 C 代码如下。
algorithm - lpc17xx使用轮询的方波频率检测
我必须通过轮询 5 个不同的引脚来读取高达 20KHz 的 5 个不同频率(方波)。我只使用一个定时器中断,每 1 毫秒。引脚的轮询将在 ISR 中完成。
到目前为止我想到的算法是:1.Count HIGH 2.Count LOW 3.检查 HIGH+LOW 的总和是否=时间段。这个算法看起来很慢,不实用。
是否有任何过滤器函数可用于检查 pin 处的频率,以便我所要做的就是调用该函数?用于频率检测的任何其他算法都会很好。
我的代码中仅限于 1 个中断(定时器中断)