سلام به همه ی دوستان
من با میکرو at91sam7x256 کار می کنم که در قسمت usart هر کاری که می کنم کار نمی کنه شرایط به شکل زیر هست:
نرخ انتقال 9600 بر روی پایه TXD1 با 8 بیت اطلاعات، 1بیت توقف، بیت توازن هم نداره فرکانس کلاک اصلی 48MHz
با max233 دارم راه میندازم و برنامه هم به صورت زیر است
#include <Atmel/ioat91sam7x256.h>
#include "LCD.h"
#include "delay_us.h"
void main ()
{
//--------------------start up--------------------------
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
AT91C_BASE_RSTC->RSTC_RMR=0xA5000001;
//--------------------speed up--------------------------
AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
AT91C_BASE_PMC->PMC_MCKR = 0x3;
AT91C_BASE_PMC->PMC_SCER = 0x1;
//-----------------------------------------------------
AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2
AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_ADC ); // AT91C_ID_ADC=4
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US1); // AT91C_ID_US1=7
//------------------------------------------------------
AT91C_BASE_PIOA->PIO_PER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_OER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_OWER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_ODSR = 0x0;
AT91C_BASE_PIOA->PIO_PDR = (1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_PIOA->PIO_MDER =(1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_PIOA->PIO_ASR = (1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_US1->US_CR=0xC;
AT91C_BASE_US1->US_MR=0x8D0;
AT91C_BASE_US1->US_BRGR=0x27;
AT91C_BASE_US1->US_CR=0x50;
AT91C_BASE_ADC->ADC_MR = 0x1000010;
AT91C_BASE_ADC->ADC_CHER = (1<<4);
lcd_pininit(10,11,12,13,14,15,16,17,18,19);
lcd_init ();
while (1)
{
AT91C_BASE_ADC->ADC_CR = 0x2;
while ((AT91C_BASE_ADC->ADC_SR&1<<4)==0);
if ((AT91C_BASE_US1->US_CSR&0x2)==0x2)
AT91C_BASE_US1->US_THR = 0xAA;
lcd_gotoxy(0,0);
lcd_puts( AT91C_BASE_ADC->ADC_CDR4&0xFF);
delay_us(200000);
lcd_clear();
delay_us(200000);
}
}
من با میکرو at91sam7x256 کار می کنم که در قسمت usart هر کاری که می کنم کار نمی کنه شرایط به شکل زیر هست:
نرخ انتقال 9600 بر روی پایه TXD1 با 8 بیت اطلاعات، 1بیت توقف، بیت توازن هم نداره فرکانس کلاک اصلی 48MHz
با max233 دارم راه میندازم و برنامه هم به صورت زیر است
#include <Atmel/ioat91sam7x256.h>
#include "LCD.h"
#include "delay_us.h"
void main ()
{
//--------------------start up--------------------------
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
AT91C_BASE_RSTC->RSTC_RMR=0xA5000001;
//--------------------speed up--------------------------
AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
AT91C_BASE_PMC->PMC_MCKR = 0x3;
AT91C_BASE_PMC->PMC_SCER = 0x1;
//-----------------------------------------------------
AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2
AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_ADC ); // AT91C_ID_ADC=4
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US1); // AT91C_ID_US1=7
//------------------------------------------------------
AT91C_BASE_PIOA->PIO_PER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_OER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_OWER = (1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_ODSR = 0x0;
AT91C_BASE_PIOA->PIO_PDR = (1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_PIOA->PIO_MDER =(1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_PIOA->PIO_ASR = (1<<5|1<<6|1<<8|1<<9);
AT91C_BASE_US1->US_CR=0xC;
AT91C_BASE_US1->US_MR=0x8D0;
AT91C_BASE_US1->US_BRGR=0x27;
AT91C_BASE_US1->US_CR=0x50;
AT91C_BASE_ADC->ADC_MR = 0x1000010;
AT91C_BASE_ADC->ADC_CHER = (1<<4);
lcd_pininit(10,11,12,13,14,15,16,17,18,19);
lcd_init ();
while (1)
{
AT91C_BASE_ADC->ADC_CR = 0x2;
while ((AT91C_BASE_ADC->ADC_SR&1<<4)==0);
if ((AT91C_BASE_US1->US_CSR&0x2)==0x2)
AT91C_BASE_US1->US_THR = 0xAA;
lcd_gotoxy(0,0);
lcd_puts( AT91C_BASE_ADC->ADC_CDR4&0xFF);
delay_us(200000);
lcd_clear();
delay_us(200000);
}
}
دیدگاه