问题标签 [pic24]

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.

0 投票
3 回答
755 浏览

serial-port - UART 3 Will Not Accept 5th Byte

The chip in question is PIC24FJ256GB210

It is a 100-Pin TQFP form factor

We have an embedded system with two microprocessors.

The two microprocessors use a UART to communicate Which is (according to me) mapped to UART #3 on the PIC24.

I place 4 bytes into UART #3. All goes well. The 5th byte will not go in.

I say FIFO backup.

My local hardware expert says that if I turn off flow control that the bytes will go out no matter what.

Is this true ? I've never heard that one before. I thought it was a hardware signal on the other side; i.e., a read signal has to occur on the other side before the FIFO buffer would allow room on this side.

His definition of "turn off flow control" is for me to not use PPS (Peripheral Pin Select) to map either the RTS (Request to Send) or CTS (Clear To Send) pins to their corresponding physical pin on the board.

I did that. Result: no change; the FIFO buffer still fills up. The "#UTXBF" bit never clears after the fourth byte goes in.

I have the schematic diagram with physical pins numbered and labeled.

I have the source code and MpLab showing the executable down at the register level, right at the assembly language instructions themselves.

I am mapping the pins of UART #3 exactly and identically to the manner that I am mapping UART #2 and UART #1, and both of those other two work perfectly.

While the numbers are different, the instruction sequences are identical. The numbers match the pins.

I am debugging this for the third time, watching each bit in each register and comparing them against the manual to make sure that I have the correct corresponding numbers in the correct bit positions in the correct special function registers.

This is from MpLab's disassembler window where the opcodes show exactly which bits are set and cleared.

After execution, RPOR6 (which is the Uart_3_Tx_PPS_Output_Register) contains 0x1C06

This is from the inc file that is used to create the masks and patterns. (I try to avoid hard coding numbers in the source files which have the actual instructions.)

I combined that knowledge with these notes from the family data sheet to create the constants with meaningful names.

From the File: "p24FJ256GB210.inc" (no quotes)

After all is said and done, with or without RTS or CTS enabled, the PIC on the other side of the UART apparently never sees the first byte that I put in on this side.

Does anyone see anything where I put the wrong bit in the wrong place ?

At this moment, I cannot confidently answer yes or no to this question: Is the UART #3 TX function correctly connected to physical Pin 23 on a 100-Pin TQFP configured PIC24FJ256GB210 ?

Thanks a ton if you can identify what's going on here.

0 投票
2 回答
239 浏览

uart - UTXEN 不会设置

芯片为PIC24FJ256GB210

UART #3 上的#UTXEN 位不会设置。

它使用完全相同的指令序列在 UART #1 上设置良好。UART #2 也是如此。

作品...

失败...

所以我想,“啊,这是我想要的一个位,而在所有只读位之上移动的完整字会以某种方式导致问题。我将只设置一个位”。

不,仍然不会设置那个位。

失败...

- 更新 -

我可以在 MpLab 中设置该位。有什么不同 ?

我真的很困惑。这里还有什么可以防止该位被设置?

0 投票
1 回答
188 浏览

embedded - PIC24 读或写存储器访问断点

我的环境...

  • PIC24
  • MpLab (V.8.80)
  • ICD 3

我有一个我想观察的字节,以查看哪些例程正在读取,哪些例程正在实际写入,以及何时发生

我只能设置断点

  • 当字节被写入时,或
  • 当它被阅读

有谁知道我可以在任一访问上设置断点的方法?即,我想看看写了什么,读了什么,以什么顺序,通过哪个指令,在哪个例程中。

我只有一个 PICkit 3 和这个 ICD-3。这是一个双处理器系统,其中两个芯片通过一些连接(最终通过外设引脚选择)到各自的 UART 的电线进行通信

我从来没有使用过、接触过,甚至没有见过真正的冰。那会让我这样做吗?即,任何总线内存访问。

这就是 MpLab 让我现在用 ICD-3 做的事情 在此处输入图像描述

0 投票
2 回答
770 浏览

c - MpLab, ASM, C, Building 容纳两者

我有一个用于 PIC24 芯片的大型 ASM 项目。(具体芯片为PIC24FJ256GB210)

我现在在 C 中有一些其他的例程。

我想将这些合并到我的项目中。

C 例程在一个有 5 个左右文件的项目中,其中一个包含int main(void)作为起点的语句。这是为了测试它们并让我们相信它们可以工作。我们现在准备移动该代码并将其合并到更大的现有系统中。

汇编语言的东西从__reset:指令开始。

我如何安排项目和构建选项,以便我可以做接下来的三件事?

  • 继续从我的__reset指示开始
  • (或者至少确保我现有__reset的和int main(void)至少相互合作)
  • 从 ASM 代码调用他的例程
  • 使用 C 代码设置的相同数据缓冲区

有趣的是,Microchip 的用户论坛和示例代码部分似乎忽略了这个想法(或者,更有可能的是,我还没有弄清楚如何找到它们)。

我认为这个问题已经被问了很多,我希望我没有重复以前的问题,但我在这里和 MicroChip 的网站上都没有看到它。欢迎提供有关此主题的有用网站的链接。

如果我只需要学习如何更好地搜索此站点和其他站点,那么这本身就是一个有用且可行的答案。再次,希望我不是在问重复的问题。

0 投票
1 回答
495 浏览

c - MpLab C,装配,中断定义的冲突

我将一些新的 C 软件例程与现有的汇编语言安排放在一起。

我发现这些错误

我在哪里、何时、如何让 C 编译器让我拥有U1RXInterrupt我的汇编例程?同上U2RXInterrupt

更新,2013 年 3 月 13 日

刚刚在C代码中找到了这个。这是我问题的根源吗?如果我把这个拿走,我的冲突会结束吗?

我希望我的汇编语言例程能够处理 Uart 1

我猜我会为 U2RXInterrupt(void) 找到一个类似的处理程序

0 投票
2 回答
1222 浏览

c - C 中的 Unsigned Long 在 PIC24 汇编语言中是什么样子的?

我在 PIC24 上用 C 定义了一个变量

假设变量的名称(在 C 文件中)是The_Number_Of_Bytes

在 PIC24 C 代码中,它是这样定义的......

当一个名为的字节数组DATABUF01包含The_Number_Of_Bytes字节(抱歉隐含的冗余)时,我将被调用,我需要确保我准确地执行了那么多字节,然后停止。

我非常有信心这个数字会小于 65535,所以为什么它是一个 unsigned long 是为了其他讨论。现在,我想知道;哪个是高位词,哪个是低位词?(就此而言,longPIC24 C 中是 32 位数字吗?)

有人能告诉我这个例子中W2会发生什么吗?W3

有人可以确认或纠正我对 unsigned long int 的 Hi/Low 顺序的想法吗?

编辑评论者要求这样做。可以回答问题(评论是我的)

请求评论,大小似乎是 4 个字节,来自这个......

0 投票
1 回答
189 浏览

microchip - 调整pic24的波特率

我有一个设备以 19200 波特输出数据。该图片已配置为 SPBRG=12 BRGH=0 开始位和停止位已被考虑在内。

然而,图片没有收到正确的数据!发送的数据已经过超级终端和示波器验证。

我找不到错误!该死的有帮助吗?

谢谢

0 投票
3 回答
1410 浏览

c - PIC 的 16 位系统上的 32 位整数运算

我需要在 16 位系统上实现 32 位定点。我的编译器似乎给了我一个“警告:表达式中的整数溢出”。我不确定我错过了什么:S。我将在下面提供我的代码的简化版本。任何建议将不胜感激:)

0 投票
0 回答
1614 浏览

android - PIC24 微控制器的 USB 主机初始化 (controlTransfer)

我正在开发一个应用程序,该应用程序利用Android 的 USB 主机功能与基于微控制器的设备 (PIC24FJ64GB002) 进行通信。该设备上有 Microchip 的 USB 堆栈,并已通过 windows 测试确认可以工作。我现在正在尝试通过 Android 应用程序与设备建立通信。到目前为止,我已经能够检测到设备(通过清单文件中的意图过滤器),打开设备并声明控制接口(接口 0)。我知道我需要对设备执行一些初始化/设置,但我不确定如何执行此操作。例如,我知道对于 Arduino USB-to-Serial 它是......

对于基于 FTDI 的 Arduinos,它是……

但我不知道如何在 PIC24 上设置 Microchip USB 堆栈。我到目前为止的代码如下所示......谢谢

MainActivity.java

清单文件

device_filter.xml

0 投票
0 回答
1078 浏览

interrupt - FreeRTOS & PIC24EP & 正确的中断处理

我在我的项目中使用 FreeRTOS 已经有一段时间了,我不得不说我喜欢它。

艰难的我正面临一个正在杀死我的错误。

我的代码包含大量代码,大约 80 个文件并使用几个微芯片堆栈并运行大约 10 个任务。

问题是每天大约有 2-3 次,芯片会进入地址错误中断,我还没有真正找出问题的根源。

我相信这个错误发生在中断的那一刻,因为我已经能够减少崩溃的发生,因为我在一个 UART 中使用 DMA 传输,从而将中断减少了 80 倍。

我已经阅读了很多关于它的示例和论坛帖子,但它似乎总是有不同的方法来处理中断,无论是否使用 taskYield,特别是在 PIC24EP 上。

另一点是中断嵌套。它目前已启用,我尚未测试禁用。我已经看到了一些关于它的线程,但没有真正回答是否应该保持启用。

这是我目前处理 DMA 中断的方式。对于以前的代码兼容性机器人,我使用队列而不是信号量,它执行相同的工作。

RTOS 库中的一些示例显示中断后没有任务产生。

  • 我应该将产量添加到每个中断中吗?

    无效属性((中断,auto_psv))_DMA1中断(无效){char val = 55;portBASE_TYPE xTaskWoken;IFS0bits.DMA1IF = 0;// 清除 DMA1 中断标志​​ xQueueSendFromISR(RS485_Queue, &val, &xTaskWoken); 如果(xTaskWoken)任务YIELD();}

我应该禁用嵌套中断吗?

我应该在我的任务中添加更多的堆栈空间吗?

我不是处理器堆栈和 RTOS 在堆栈级别的工作方式的专家。如果两个中断同时发生,那么当前正在运行的任务需要更大的堆栈大小吗?我的问题可能与同时有两个(或更多)中断以及嵌套中断使用的任务空间比实际定义的更多有关吗?

谢谢!

编辑:问题解决了,实际上我并不是唯一一个遇到这个问题的人,因为不幸的是它似乎没有出现在文档或代码示例中,而只是出现在需要挖掘的一些 freertos 网页中. 使用 FreeRTOS 内核的中断的优先级不应高于默认值为 1 的 configKERNEL_INTERRUPT_PRIORITY,而微芯片上的中断的默认值为 3。这意味着使用默认优先级的中断会导致零星的陷阱错误。