完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是个非常基本的问题,我根本不知道答案,而搜索结果一直给我不相关的答案。 我需要在英飞凌 PSoC4 MAX 微控制器中引用一些特定的外设寄存器。 cy_device.h 标头列出了所有不同的寄存器。 然而,集成开发环境却对我引用它们表示反对。
下面是一个定义 I2C 寄存器的示例: #defineSCB_I2C_CTRL(base) (((CySCB_Type*) (base))->I2C_CTRL)我想把这个寄存器转存到 UART,以便调试。 就像这样 debug_putHexUINT32(SCB_I2C_CTRL); 如果按上述写法,编译器会认为 SCB_I2C_CTRL 未声明。 这就说得通了;定义名称包括(基数)。 但如果我将调用改为 debug_putHexUINT32(SCB_I2C_CTRL(base));编译器抱怨"base" 未声明。 我不明白 (base) 的作用是什么:它显然不仅仅是定义名称的一部分。 如何正确使用该登记册? |
|
相关推荐
2个回答
|
|
在宏中,基数指的是 SCB 的实例。 例如,您使用的是 SCB0,那么 UART 功能调用将如下所示
debug_putHexUINT32(SCB_I2C_CTRL(SCB0)); |
|
|
|
在PSoC4 MAX寄存器预处理器定义中,"Base"部分的意义是指定寄存器所属的特定外设的基地址。这样,您可以根据需要引用不同的外设寄存器。
关于您遇到的问题,您需要首先确定您要使用的I2C外设的基地址。假设您的I2C外设的基地址是0x40000000,您可以这样引用I2C_CTRL寄存器: ```c #define I2C_BASE 0x40000000 #define I2C_CTRL_REG (*(uint32_t *)(I2C_BASE + 0x00)) ``` 然后,您可以使用`I2C_CTRL_REG`变量来访问I2C_CTRL寄存器。例如,要将其值传递给`debug_putHexUINT32`函数,您可以这样做: ```c debug_putHexUINT32(I2C_CTRL_REG); ``` 这样,您应该能够正确地引用I2C寄存器并将其值传递给调试函数。请确保将`0x40000000`替换为您实际使用的I2C外设的基地址。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5400 浏览 2 评论
4075 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3590 浏览 9 评论
1203 浏览 8 评论
3494 浏览 7 评论
411浏览 2评论
243浏览 2评论
351浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5409浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
414浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 05:45 , Processed in 2.458396 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号