پاسخ : مشکل با وقفه دریافت ارتباط سریال
دوستان عزیز این برنامه به طور کامل جواب داد و تست شد:
دریافت اطلاعات توسط اینتراپت انجام میشود
ارسال اطلاعات در حین اجرای برنامه انجام میشود
دوستان عزیز این برنامه به طور کامل جواب داد و تست شد:
دریافت اطلاعات توسط اینتراپت انجام میشود
ارسال اطلاعات در حین اجرای برنامه انجام میشود
کد:
#include <meisam_sam7s64io.h>
#include <meisam_delay.h> // chon dar lcd.c be tore dasti "meisam_delay.h" ra include karde am inja naabyed benevisim
#include <meisam_micro_init.h>
#include <lcd.h>
#include <lcd.c>
#include <stdio.h>
int ttt=0;
void meisam_usart_receive_interrupt (void) __irq
{
int jj;
char c[16];
ttt=*AT91C_US1_RHR&0x1FF; // received charachter
PA2_ON;
/////////////// MOHEM: nabayad dar tabee vaghfe az tavabee delay dar estefade kard/
/////////////// neveshtane 3 khate zir eshkal ijad mikonad ////////////////////////
//lcd_gotoxy(0,0); //
//sprintf(c,"meisam : %4d",jj); //
//lcd_putsf(c); //
//////////////////////////////////////////////////////////////////////////////////////
*AT91C_AIC_ICCR = 0xFFFFFFFF;(1 << AT91C_ID_US1); /* Interrupt Ack*/
*AT91C_AIC_EOICR = 0; /* End of Interrupt*/
}
int main()
{
char c[16];
disable_watchdog();
enable_external_reset();
oscilators_init(1); //0=32k internal 1=48M crystal(18432M)
*AT91C_PMC_PCER=(1<<AT91C_ID_PIOA); //enable I/O clock
*AT91C_PMC_PCER=(1<<AT91C_ID_US1); // enable USART1 clock
*AT91C_PIOA_PDR=(1<<21|1<<22); // enable peripheral for PA22,PA21
*AT91C_PIOA_MDER=(1<<21|1<<22); // enable multi drive for PA22,PA21
*AT91C_PIOA_ASR=(1<<21|1<<22); // select mode A
*AT91C_US1_CR=0xC; //reset receiver & transmitter
*AT91C_US1_MR=0x8D0;// 8 bit no_parity 1 stopbit normal mode MCK/8
*AT91C_US1_BRGR=0x9C; //BAUD RATE = 2400
*AT91C_US1_CR=0x50; //enable send and receive
AT91C_AIC_SVR[AT91C_ID_US1] = (unsigned long) meisam_usart_receive_interrupt;
AT91C_AIC_SMR[AT91C_ID_US1] =0x62; //AT91C_ID_PIOA=2 96=>proirity=0 falling edge sensitive
*AT91C_AIC_ICCR =(1<<AT91C_ID_US1);
*AT91C_US1_IER=0x1;
*AT91C_AIC_IECR=(1<<AT91C_ID_US1);
PA2_OUT;
lcd_pininit(7,9,10,11,12,26,25,24,13,14); //(PA13->4lcd PA24->6lcd PA25->7lcd PA26->8lcd PA12->9lcd PA11->10lcd PA10->11lcd PA9->12lcd PA8->13lcd PA7->14lcd)
lcd_init();
lcd_clear();
while(1)
{
delay(48000,1000);
if(PA2==1) PA2_OFF;
else PA2_ON;
lcd_gotoxy(0,0);
sprintf(c,"char:%4d ",ttt);
lcd_putsf(c);
if(PIN23==0)
{
while(*AT91C_US1_CSR&2!=2); // wait till usart gets ready for send
*AT91C_US1_THR=73; // send charachtere 73
lcd_gotoxy(0,0);
lcd_putsf("73 SENT!!");
delay(48000,2000);
}
}
}


دیدگاه