问题标签 [lpc]
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.
embedded - ARM LPC1768 UART0 配置,波特率错误
我的波特率应该是 115200,但它是 892.9
我已经确认我的 cclk 运行在 100MHz。
我用 Kunil (uart_interrupt_demo) 的示例项目中的代码替换了 UART 初始化代码:
它有效!
我必须通过,看看我做错了什么。我怀疑寄存器设置的顺序是关闭的。
size - 在 Keil 中提供更多堆
我正在研究 MCB2300(带有 LPC2378 处理器)并使用 keil uVision4。在我的程序中,我正在使用 malloc() 函数创建动态内存。由于所有动态内容都将存储在堆中,因此我需要确保分配所需的堆大小。我的启动文件 (LPC2300.s) 中堆的默认值为0x00000800。在我的应用程序中,我正在读取图像(bmp 格式)并将像素值存储到矩阵中,并且该矩阵是根据输入图像的大小动态创建的。我可以在启动文件中设置的最大堆值是0x000072FF。对于这个堆值,我能够成功读取 44 x 33 的图像。超出此大小的内存不会被分配。我需要读取尺寸至少为 100 x 100 的图像。我的可用 RAM 为32K
这些是我编译代码后的输出值
程序大小: Code=30664 RO-data=1220 RW-data=132 ZI-data=37628
如何提供额外的堆?
是否可以将堆内存存储在为 LPC2378 提供的 SD/MMC 卡或外部存储器上。请帮我解决这个问题
c++ - LPC1700 不会从深度睡眠中唤醒
我在LPC1754、59和 68 + FreeRTOS + CMSIS 上运行固件。
我希望能够将微控制器置于可能的最低功耗模式,但是:
- “睡眠”是不够的。
- 一旦微控制器处于“深度睡眠”、“断电”或“深度断电”状态,我就无法再通过按下按钮 (EINT3) 来唤醒它。
据我在“ LPC17xx 用户手册”(第 58、59 页)中阅读的内容,我应该能够从 EINT3 唤醒到“断电”模式。
我错过了什么?低功耗时是否产生中断?怎么讲?我应该做任何特定的事情来生成它吗?
- 为了简化起见,我从内部 RC 运行,所以 PLL 勘误表不是问题。
编辑:
- 事实上,我正在对 P2 中的几个引脚使用“GPIO 中断”,而这些引脚又与 EINT3 共享。EINT3 引脚本身 (P2.13) 未被使用。请参阅下面的评论。
c - LPC17xx:检查 RTC 是否正在运行
我正在使用 NXP LPC17xx 系列微控制器(LPC1759 和 LPC1768)。
如何确定 RTC 是否正在运行?
我正在做一个测试
但这似乎不太可靠。打开我的设备时,我已经看到了 3197 年左右的值。
如何判断 RTC 是否正在运行并且其值是否未损坏?
编辑:
我最终在 RTC 值中添加了一个简单的完整性检查:
它在我的 POST 期间运行,如下所示。
embedded - SDHC SPI 写入问题
我一直在尝试用LPC1766 SPI外设做一个 SD 卡接口,现在我陷入了一个我无法在任何地方找到答案的问题。
问题是:SDHC 卡没有按预期响应写入和读取命令。
在基于 Chan 的流程图和 NXP 应用说明的初始化上一切正常。我可以区分卡片版本,读取 OCR、CID、CSD 并确定它们的大小。
在这一步之后,我开始每隔一秒写入一个块并读回它以检查数据完整性。在金士顿 SDHC 4 GB 4 类卡上,我可以发送第一个写入命令,但在第二个上,卡甚至没有向 CMD24 应答(0x00 或 0x01)。使用 SanDisk 4 GB Class 4 卡,结果是不同的,每个命令都由卡回答,但是在读回数据时我只得到零(我确定我没有写零)。如果我使用 SDSC 卡,一切正常。
我知道 SDHC 是块寻址而不是字节寻址,并且我需要发送 ACMD41 和 CCS 以用于 SDHC。我也知道时钟频率不是问题(使用 400 KHz 启动,然后 20 MHz 写入/读取),因为我刚刚打开 CRC 检查并且所有卡都在接受命令和数据。如果我停止计算 CRC,所有卡都会拒绝命令和数据。
embedded - 通过 PS/2 端口发送数据
我正在为 LPC2148 从头开始编写鼠标驱动程序,但我坚持这一点。我可以从键盘接收数据,但鼠标需要向其发送命令代码。最好的方法是什么?
embedded - NXP LPC17xx 挂起的中断
LPC17xx 系列的外部中断遇到了一个奇怪的问题。
我有一个外部按钮设置为外部中断 1,下降沿与内部作为外部上拉电阻(p2.11):
和:
和:
这是 ISR 的一部分(包括 200 毫秒按钮去抖定时器):
“在这里工作”部分可能需要一些时间(例如,在某些情况下超过 200 毫秒)。这是为了进一步执行程序而没有问题。
问题是,当第一次输入 ISR 并且在 ISR 执行时我第二次按下按钮(这必须快速完成)时,设置了一个挂起的中断并导致 ISR 在第一次结束时再次执行时间。我猜这是正常行为,因为 EXTI_ClearEXTIFlag(1) 不会清除 NVIC 中的任何未决中断。所以我添加了 NVIC_ClearPendingIRQ(EINT1_IRQn) 来清除 ISR 代码中几个位置的新挂起中断,以确保挂起的中断被清除。奇怪的是,这根本不起作用。
我的一些问题是,如何通过 JTAG/调试器(内存地址?)读取挂起的中断。这里发生了什么?有人可以解释这种行为,也许有线索如何解决它?
谢谢!
c - LPC1788 微控制器的内存分配问题
我对微控制器编程还很陌生;我已经用 LPC1788 工作了几个星期了。
我最近遇到的一个问题是我的内存比我预期的要快得多。我已经通过测试我可以 malloc 有多大的连续内存块来测试似乎有多少内存可用,结果是 972 字节。分配从地址 0x10000000 开始(该板上的片上 SRAM 的开始位置应该在 64kB 左右)。
我目前正在开发的程序旨在充当一个简单的调试器,它利用 LCD 并允许向其打印消息。我有一个字符串会不断被新消息“添加到”,然后整个消息将打印在 LCD 上。当消息在屏幕下方的长度超过垂直边界时,它将删除最旧的消息(靠近顶部的消息),直到适合为止。但是,在它拒绝分配更多内存之前,我只能添加大约 7 条额外的消息。如果需要,该项目的 main.c 托管在http://pastebin.com/bwUdpnD3
早些时候,我还开始了一个使用 threadX RTOS 创建和执行多个线程的项目。当我尝试在该程序中使用 LCD 时,我发现那里的内存也非常有限。LCD 似乎存储了从 SDRAM 基地址开始的所有像素数据,但我不确定这是否与我使用的 SRAM 相同。
我需要的是一种分配足够内存的方法,以允许多个线程运行或存储大字符串,同时能够利用 LCD。一种可能是使用缓冲区或其他内存区域,但我不太确定如何做到这一点。任何帮助,将不胜感激。
tl;dr:当试图在 LCD 上打印大字符串时,SRAM 上的可分配内存很快就会用完。
编辑 1:发现变量 currMessage 存在内存泄漏。我认为现在已经解决了:
编辑 2:实施内存泄漏修复。程序现在运行得更好了,我觉得很愚蠢。
sd-card - SPI模式下的SD卡写入速度
我有一张通过 SPI 模式连接到微控制器的 SD 卡(或 SDHC 卡)。我正在使用Chan 的 FAT库。我向它写入来自 8192 字节缓冲区的数据(由于 RAM 不足,缓冲区不能更大)。这种写入是定期执行的。通常,在缓冲区再次填充之前,写入已准备好。但是偶尔(也取决于缓冲区填充速度)会出现问题,并且在必须写入新缓冲区之前写入尚未准备好,从而导致数据丢失。
顺便说一句,扇区大小也设置为 8192 字节,但其他似乎没有影响。
可以用范围监控写作,并表明有时写作需要很长时间。例如,比平时长四倍。
这里发生了什么,也许我该如何防止这种情况发生?这与读取、修改、写入序列有关吗?我需要外部 RAM 缓冲区吗?还是有更好的方法来提高性能?
c - 调用 strcpy 后尝试释放内存导致程序崩溃
我知道这里有很多人抱怨 strcpy,但我没有找到任何使用搜索来解决我遇到的问题的东西。
首先,调用 strcpy 本身不会导致任何类型的崩溃/分段错误。其次,代码包含在一个函数中,我第一次调用这个函数时它工作得很好。它只在第二次通过时崩溃。
我正在用 LPC1788 微控制器编程;内存非常有限,所以我明白为什么 malloc 之类的东西可能会失败,但不是免费的。
函数 trimMessage() 包含代码,该函数的目的是在大字符串数组变得太大时删除它的一部分。
感谢所有帮助过的人。该功能现在可以正常工作。对于那些问我为什么要打印出我刚刚释放的数组的人,那只是为了表明问题发生在 strcpy 之后,并排除了它之后出现的任何其他代码。
最终代码在这里,以防它对遇到类似问题的任何人有用: