共2条
1/1 1 跳转至页
at91sam7s64 at91sam7s64的程序问题求救!真心谢谢各位!!急!
问
我想问的是,AT91SAM7S64的I/O口平常输出的低电平吗?下面是我的程序!为什么我读按件的制没有起作用呢,我的目的是按一个键对应的LED亮,就这么简单,为什么LED一上电就一直亮,下面是我的程序!请知道的给我查下错误谢谢!
#include "AT91SAM7S64.h"
#include "Board.h"
unsigned int Key_Val;
unsigned int key;
int main(void)
{
unsigned int delay;
*AT91C_PMC_SCER = 1;
*AT91C_PMC_PCER = SW_MASK; //使能PIO口时钟
*AT91C_PIOA_PER = LED_MASK | SW_MASK;//使能4个LED与4个KEY脚I/O口功能
*AT91C_PIOA_OER = LED_MASK; //使能4个LED管脚的输出功能
*AT91C_PIOA_ODR = SW_MASK; //使能4个KEY管脚的输入功能
*AT91C_PIOA_PPUER = SW_MASK;
*AT91C_PIOA_IFER = SW_MASK;
while (1)
{
Key_Val = *AT91C_PIOA_PDSR;//注:读I/O口电平时,需使能PIO的时钟控制器寄存器(AT91C_PMC_PCER)
if (Key_Val & SW1)
{
*AT91C_PIOA_SODR = LED1;
}
else
{
*AT91C_PIOA_CODR = LED1;
}
if (Key_Val & SW2)
{
*AT91C_PIOA_SODR = LED2;
}
if (!(Key_Val & SW2))
{
*AT91C_PIOA_CODR = LED2;
}
if (Key_Val & SW3)
{
*AT91C_PIOA_SODR = LED3;
}
else
{
*AT91C_PIOA_CODR = LED3;
}
if (Key_Val & SW4)
{
*AT91C_PIOA_SODR = LED4;
}
else
{
*AT91C_PIOA_CODR = LED4;
}
还有一个串口程序,我感觉是对,用串口调试工具收码就是没有!能否帮我看下原因吗?程序如下:
#include "AT91SAM7S64.h"
#include "Board.h"
#define RXRDY (unsigned int) 0x1 //接收器准备好标志位,0为未接收到完整字符,1为接收器(US_RHR)有数据未被读取
#define TXRDY ((unsigned int) 0x1 << 1) //发送器准备好标志位,1为发送器(US_THR)内无数据
#define TXEMPTY ((unsigned int) 0x1 << 9) //发送器空标志位,1为发送器(US_THR)内无数据,复位时或USART禁止时此位为0,发送使能命令(US_CR中)可以将其置位
unsigned char RBuff[256];
unsigned char index;
int main(void)
{
unsigned int i;
unsigned int delay;
*AT91C_CKGR_MOR = 0x701; //使能主振荡器和设置起振时间,可以检查CKGR_MCFR(0xfffffc20)进行确认
*AT91C_PMC_MCKR = 0x01; //选择Mster Clock is main clock divided by 0,Processor Clock is the Mster Clock
*AT91C_PMC_PCKR = 0x11;
*AT91C_PMC_SCER = 0x1; //使能系统时钟寄存器的处理器时钟
*AT91C_PMC_PCDR = 0xffffffff; //禁止所有外围时钟
*AT91C_PMC_PCER = 0x60; //使能USART0时钟
*AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//禁止该两个管脚的I/O口功能
*AT91C_PIOA_ASR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//将该两个I/O口分配给外围A,即RXD0和TXD0
*AT91C_US0_CR = 0x10c; //复位接收器和发送器,使能接收与发送,复位状态位
*AT91C_US0_MR = 0x000008c0; //正常的UART模式,选择时钟为MCK,8位长度,无校验,1位停止位,
*AT91C_US0_IDR = 0xf3fff; //禁止所有UART相关的中断
*AT91C_US0_BRGR = 30; //Baudrate = SelectedClock/(8(2-Over)CD) = MCK/16CD = 18432000/(16*30) = 38400
//*AT91C_US0_CR = 0x15c;
*AT91C_US0_CR = 0x50; //使能发送与接收
index = 0;
*AT91C_US0_THR = 1;
while (1)
{
for (i = 0; i < 256; i++)
{
if ((*AT91C_US0_CSR) & TXEMPTY) //判断发送器是否为空
{
*AT91C_US0_THR = i; //空,则发送数据
}
for (delay = 0; delay < 0xfff; delay++);
}
/if ((*AT91C_US0_CSR) & RXRDY)
{
// RBuff[index++] = *AT91C_US0_RHR;
}
}
} 答 1: 怎么没有人回复呢?大家帮我看下好吗?程序问题
#include "AT91SAM7S64.h"
#include "Board.h"
unsigned int Key_Val;
unsigned int key;
int main(void)
{
unsigned int delay;
*AT91C_PMC_SCER = 1;
*AT91C_PMC_PCER = SW_MASK; //使能PIO口时钟
*AT91C_PIOA_PER = LED_MASK | SW_MASK;//使能4个LED与4个KEY脚I/O口功能
*AT91C_PIOA_OER = LED_MASK; //使能4个LED管脚的输出功能
*AT91C_PIOA_ODR = SW_MASK; //使能4个KEY管脚的输入功能
*AT91C_PIOA_PPUER = SW_MASK;
*AT91C_PIOA_IFER = SW_MASK;
while (1)
{
Key_Val = *AT91C_PIOA_PDSR;//注:读I/O口电平时,需使能PIO的时钟控制器寄存器(AT91C_PMC_PCER)
if (Key_Val & SW1)
{
*AT91C_PIOA_SODR = LED1;
}
else
{
*AT91C_PIOA_CODR = LED1;
}
if (Key_Val & SW2)
{
*AT91C_PIOA_SODR = LED2;
}
if (!(Key_Val & SW2))
{
*AT91C_PIOA_CODR = LED2;
}
if (Key_Val & SW3)
{
*AT91C_PIOA_SODR = LED3;
}
else
{
*AT91C_PIOA_CODR = LED3;
}
if (Key_Val & SW4)
{
*AT91C_PIOA_SODR = LED4;
}
else
{
*AT91C_PIOA_CODR = LED4;
}
还有一个串口程序,我感觉是对,用串口调试工具收码就是没有!能否帮我看下原因吗?程序如下:
#include "AT91SAM7S64.h"
#include "Board.h"
#define RXRDY (unsigned int) 0x1 //接收器准备好标志位,0为未接收到完整字符,1为接收器(US_RHR)有数据未被读取
#define TXRDY ((unsigned int) 0x1 << 1) //发送器准备好标志位,1为发送器(US_THR)内无数据
#define TXEMPTY ((unsigned int) 0x1 << 9) //发送器空标志位,1为发送器(US_THR)内无数据,复位时或USART禁止时此位为0,发送使能命令(US_CR中)可以将其置位
unsigned char RBuff[256];
unsigned char index;
int main(void)
{
unsigned int i;
unsigned int delay;
*AT91C_CKGR_MOR = 0x701; //使能主振荡器和设置起振时间,可以检查CKGR_MCFR(0xfffffc20)进行确认
*AT91C_PMC_MCKR = 0x01; //选择Mster Clock is main clock divided by 0,Processor Clock is the Mster Clock
*AT91C_PMC_PCKR = 0x11;
*AT91C_PMC_SCER = 0x1; //使能系统时钟寄存器的处理器时钟
*AT91C_PMC_PCDR = 0xffffffff; //禁止所有外围时钟
*AT91C_PMC_PCER = 0x60; //使能USART0时钟
*AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//禁止该两个管脚的I/O口功能
*AT91C_PIOA_ASR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//将该两个I/O口分配给外围A,即RXD0和TXD0
*AT91C_US0_CR = 0x10c; //复位接收器和发送器,使能接收与发送,复位状态位
*AT91C_US0_MR = 0x000008c0; //正常的UART模式,选择时钟为MCK,8位长度,无校验,1位停止位,
*AT91C_US0_IDR = 0xf3fff; //禁止所有UART相关的中断
*AT91C_US0_BRGR = 30; //Baudrate = SelectedClock/(8(2-Over)CD) = MCK/16CD = 18432000/(16*30) = 38400
//*AT91C_US0_CR = 0x15c;
*AT91C_US0_CR = 0x50; //使能发送与接收
index = 0;
*AT91C_US0_THR = 1;
while (1)
{
for (i = 0; i < 256; i++)
{
if ((*AT91C_US0_CSR) & TXEMPTY) //判断发送器是否为空
{
*AT91C_US0_THR = i; //空,则发送数据
}
for (delay = 0; delay < 0xfff; delay++);
}
/if ((*AT91C_US0_CSR) & RXRDY)
{
// RBuff[index++] = *AT91C_US0_RHR;
}
}
} 答 1: 怎么没有人回复呢?大家帮我看下好吗?程序问题
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |