Embedded XMEGA-A3BU说明-使用DMA轮询确定按钮1是否按下
如果使用轮询按下SW1,则分配要求我们打开LED。我相信我正在设置每个端口的方向并正确读取寄存器。但是,当我按下SW1时,什么也没有发生。在代码运行时,无法调试和中断代码以查看寄存器中的内容 [HWGuide]状态:[HWGuide]: [数据表]状态:[数据表]: [手动]状态:[手动]: 代码:Embedded XMEGA-A3BU说明-使用DMA轮询确定按钮1是否按下,embedded,polling,dma,atmel,atmelstudio,Embedded,Polling,Dma,Atmel,Atmelstudio,如果使用轮询按下SW1,则分配要求我们打开LED。我相信我正在设置每个端口的方向并正确读取寄存器。但是,当我按下SW1时,什么也没有发生。在代码运行时,无法调试和中断代码以查看寄存器中的内容 [HWGuide]状态:[HWGuide]: [数据表]状态:[数据表]: [手动]状态:[手动]: 代码: 我希望寄存器读取(0x02)0000 0010或反向(0xFD)1111 1101,如果按下按钮,LED将打开或关闭。使用位操作隔离我试图轮询的位。我不知道其他的比特可以被设置成什么 int mai
我希望寄存器读取(0x02)0000 0010或反向(0xFD)1111 1101,如果按下按钮,LED将打开或关闭。使用位操作隔离我试图轮询的位。我不知道其他的比特可以被设置成什么
int main(void)
{
//set PORTR direction
WriteReg(PORTR, 0xFF);
//set PORTF direction
WriteReg(PORTF, 0xF9);
while(1)
{
char statusPF1 = (ReadReg(PORTF_IN) & 0x02) >> 1;
char statusPF2 = (ReadReg(PORTF_IN) & 0x04) >> 2;
if((statusPF1 == 0)) //if PF1 = 0
{
WriteReg(PORTR_OUTTGL, 0x01); //toggle LED0
_delay_ms(1000);
}
if((statusPF2 == 0)) //if PF2 = 0
{
WriteReg(PORTR_OUTTGL, 0x02); //toggle LED1
_delay_ms(1000);
}
if ((statusPF1 != 0) && (statusPF2 != 0))
{
_blinkLEDs();
}
}
}
//PORTR starts at address = 0x07E0
//PORTF starts at address = 0x06A0
//Data Input Value register on I/O = (Addr) + 0x08 = 0x06A8 (PORTF)
#define PORTR *((volatile unsigned char *)0x7E0) /* I/O Port Register */
#define PORTF *((volatile unsigned char *)0x6A0) /* I/O Port Register */
#define PORTF_IN *((volatile unsigned char *)0x6A8) //PORTF Input Value Reg
#define PORTR_OUTTGL *((volatile unsigned char *)0x7E7) //LED Toggle Reg
#define ReadReg(port) (port)
#define WriteReg(port, value) (port = value)
int main(void)
{
//set PORTR direction
WriteReg(PORTR, 0xFF);
//set PORTF direction
WriteReg(PORTF, 0x00);
while(1)
{
if((ReadReg(PORTF_IN) == 0xFD)) //if PF1 = 0
{
WriteReg(PORTR_OUTTGL, 0x3); //toggle LEDs
{
{
}
int main(void)
{
//set PORTR direction
WriteReg(PORTR, 0xFF);
//set PORTF direction
WriteReg(PORTF, 0xF9);
while(1)
{
char statusPF1 = (ReadReg(PORTF_IN) & 0x02) >> 1;
char statusPF2 = (ReadReg(PORTF_IN) & 0x04) >> 2;
if((statusPF1 == 0)) //if PF1 = 0
{
WriteReg(PORTR_OUTTGL, 0x01); //toggle LED0
_delay_ms(1000);
}
if((statusPF2 == 0)) //if PF2 = 0
{
WriteReg(PORTR_OUTTGL, 0x02); //toggle LED1
_delay_ms(1000);
}
if ((statusPF1 != 0) && (statusPF2 != 0))
{
_blinkLEDs();
}
}
}