gpt4 book ai didi

c - PIC 将 SFR 地址传递给 C 语言中的函数

转载 作者:行者123 更新时间:2023-12-01 19:37:09 25 4
gpt4 key购买 nike

我正在尝试使用 C 语言将 I/O 引脚的引用作为函数参数传递给 PIC24F MCU。对于 PIC,设备头文件通过以下方式提供对 I/O 缓冲寄存器的访问:

LATAbits.LATA2 = 0;    // sets the pin (RA2 in this case) low.
if (PORTAbits.RA3) { // reads the state of the pin. (RA3)

我想做这样的事情:

int main() {
Configure(); // Sets up peripherals, etc.
WaitForHigh(PORTAbits.RA3); // waits for pin RA3 to go hi.
...

return 0;
}

void WaitForHigh( ?datatype? pin_reference ) {

while( !pin_reference ); // Stays here until the pin goes hi.
}

那么我想在这里传递什么数据类型?当我轮询该 pin 时实际上发生了什么?下面,我从我正在使用的 PIC24F 器件头中复制了相关部分,以防有帮助。

#define PORTA PORTA
extern volatile unsigned int PORTA __attribute__((__sfr__));
typedef struct tagPORTABITS {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
} PORTABITS;
extern volatile PORTABITS PORTAbits __attribute__((__sfr__));

提前谢谢您!

最佳答案

作为使用宏的替代方法,函数可以接受端口寄存器地址(或锁存寄存器地址,例如,在引脚配置为输出的情况下为 LATA)和寄存器中位的掩码,该地址是需要。例如:

#include<p24FV32KA301.h>   // defines both PORTA and _PORTA_RA3_MASK 

void WaitForHigh( volatile unsigned int * port, pin_mask ) {

while( !(*port & pin_mask) ); // Stays here until the pin goes hi.
}


int main()
{
...
WaitForHigh( &PORTA, _PORTA_RA3_MASK ); // waits for pin RA3 to go hi.
...

return 0;
}

关于c - PIC 将 SFR 地址传递给 C 语言中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com