完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我试图发送/接收一个字节(例如,0B01110001)从PIC32到DSP上的I2C总线,其中PIC32为主,DSP为奴隶。我想使用简单的轮询方法(静态模型,没有中断),但是无法找到任何简单的示例/代码,说明如何在和谐框架中实现这一点。我试图在和声帮助下使用下面的代码来设置它,但是我不确定这是否是正确的方法。有人能提供一个简单的示例代码吗?我对和谐是陌生的,它给我带来很多麻烦。也可以在实际硬件测试之前模拟这个代码吗?
|
|
相关推荐
12个回答
|
|
|
你好,Freezessc,谢谢你的回复。我只想在每次按下一个与MCU相连的按钮时发送一个字节给DSP。我应该去掉数组并使用UIT88T吗?你认为剩下的代码是正确的,通过I2C发送数据,我能模拟它验证吗?
|
|
|
|
|
|
事实上,我刚读到你使用的是静态模型?我不认为这些是调用静态模型的正确函数。你是什么版本的和声?假设您在2.0+上,我想您想要调用DRV_I2C0_Transmit()DRV_I2C0_Receive()您可以通过转到项目窗口并在头文件Files/yourappname/system_config/default(或配置名称)/framework/./i2cthe functions下查看生成的函数头文件您已经列出了i2c驱动程序.edit的动态版本:就模拟而言,我认为您可以向寄存器中注入字节,但是我没有使用模拟器的经验,因此希望其他人可以提供更多的洞察力。
|
|
|
|
|
|
我使用的是和声版本2.0.5.2,有什么例子可以用来实现静态模型吗?
|
|
|
|
|
|
我认为大多数的例子都使用动态版本。如果您使用的是静态缓冲模型,不过我认为您可以保持不变,只要去掉DRV_I2C_Open,然后用DRV_I2C0_Transmit(DSP_SLAVE_ADDRESS,appData.drvI2CHandle,DSP_SLAVE_ADDRESS,&myBuffer[1],1,NULL)替换DRV_I2C_Transmit(DSP_SLAVE_ADDRESS,&myBuffer[0],1,NULL);tic版本只是将驱动程序函数分配给您使用的特定外围设备,所以如果您有两个i2c端口,那么您将拥有一个DRV_I2C0_Transmit和DRV_I2C1_Transmit。
|
|
|
|
|
|
谢谢你的建议,我会尽量像你所说的那样实施它。如果我有任何麻烦,我会再次打扰你:
|
|
|
|
|
|
你好,Freezessc,我像你建议的那样修改了代码,但是我不能传输数据,你能看看下面的代码吗?你能解释一下我如何发送一个字节的数据(例如0b11100001),我定义了一个uint8_t数据[0],然后使用指针,但是我不知道这是怎么回事。ORKS或我的数据将如何传输。我的理解是,数据字节(0b11100001)将位于数据[0],指针指向数据[0]的第一位,并使用fifo传输数据。这是正确的吗?
|
|
|
|
|
|
你好,阿扎曼,我看到代码中有几个错误。当声明UIT88T数据(0)时,创建一个具有零索引的数组。通常,当声明一个数组时,需要声明数组的大小和索引(N-1)。这意味着如果我声明一个数组的10个元素(数据(10)),只有索引0到9是有效的。如果你想要一个1元素的数组,你可以通过输入UIT88T数据(1)来声明它,并通过说数据(0)来访问该值。我希望我不是太明显,但是我已经看到您在索引一个数组时犯了两个错误,如果不清楚,我建议花一些时间来研读数组索引/声明在C中是如何工作的。至于其余的代码,我假设您将某些值放入不在提供的代码中的数据[0]中?我不认为你在索引0中输入了0B1110000的值。首先要做的事情之一是callDRV_I2C0_Initialize();如果从和谐配置器生成文件,则不需要像在system_in it.c中那样这样做。您可以在sourceFiles->app/system_config/default(或者您的配置名称是什么)/s下验证这一点。它应该在SysSimulalI化例程中调用。剩下的代码看起来还可以,只要继续一遍又一遍地编写我想您想做的事情。i2c外围设备可能出错的另一个地方是,您需要确保在和谐配置器中为SCK和SDA分配了管脚,我不知道了解您使用的图片,但是请确保在和谐配置器下您选择了I2C模块ID 1,在pin settings选项卡中配置了SCK1和SDA1。s整个字节(或者指针的大小数据类型)。发送函数将带指针,并将UIT88T数据类型加载到I2CXTRN寄存器中,并将其发送出去。
|
|
|
|
|
|
传递给Harmony的缓冲区不应该在堆栈中分配。Harmony文档没有明确说明这一点,但是如果您查看驱动程序的源代码,您会发现一些类似drv_i2c.c:2271的东西。它们只是在队列中存储缓冲区地址。因此,您的缓冲区应该一直可用,直到传输完成。
|
|
|
|
|
|
“1010”意味着什么?按照您编写它的方式,它是一个十进制值1010,它等于0x3F2,它太大,不能放入uint8_t中。
|
|
|
|
|
|
嗨,我把数据类型更改为char,现在我正在使用,但是每次运行代码时,都会在appData.dataTransmit中获得值(d“0x64”)。appData.dataTransmit的地址是(0xA000021C),appData从(0xA0000218)开始。我无法获得想要接收的数据的值,例如“a”,但是每次都得到“d”,我不知道它来自哪里。RealStII2C1Trn总是空的,是否意味着我的数据没有被传输?
|
|
|
|
|
|
阿扎曼!很抱歉这些尖刻的话,但是你应该先学习C。Nick。
|
|
|
|
|
|
你希望收到来自DSP的响应吗?DRVIII2C0IORDER()只发送,您需要调用DVVII2C0SURVER()来在I2C上实际接收任何东西。AppDATA DATATRAMSIT只会是一个指针,指向DRVIII2C0IORIN()返回的缓冲句柄。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:24 , Processed in 0.997455 second(s), Total 94, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1114