mejia 0 16 июня, 2005 Опубликовано 16 июня, 2005 · Жалоба :unsure: Идея: по прерыванию, запись в буфер и чисто для себя(для проверки) обратно посылается буква U, естествнно не работает.... перерыл документацию по AT90S2313 , вроде все регистры отвечающие за прерывания включены, и все равно не работает :huh: можете сами у себя проверить, кроме как мистикой я это описать не могу void main() { init_devices(); while(1); } // getting byte from COM PORT #pragma interrupt_handler get_result:8 void get_result() {//x.z no ne rabotaet x[cou]=UDR;cou++; if (cou==4) {cou=0;}//sort();} putchar('U'); //vivod obratno !!! } void port_init(void) { DDRB =0xFF; //init port B na vixod PORTB = 0x00; //vkl all PORTD = 0x00; //port vkl DDRD = 0x00; //vse na vxod } //call this routine to initialise all peripherals void init_devices(void) { CLI(); port_init(); uart0_init(); SetBit (SREG,7); //bit maski prerivanii MCUCR = 0x00; GIMSK = 0xF0; //obshii registr maski prerivanii GIFR = 0xF0; TIMSK = 0x00; //0x00 SEI(); } //UART0 initialisation // desired baud rate: 9600 // actual: baud rate:9600 (0,0%) // void uart0_init(void) { UCR = 0x00; //disable while setting baud rate UBRR = 0x17; //set baud rate // UBRR = 0x23; //set baud rate UCR = 0x09; //enable } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stranix 0 16 июня, 2005 Опубликовано 16 июня, 2005 · Жалоба А ты ждешь когда тебе придет буква "U"? А ты почему при инициализации не включил трансмитер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ssm 0 17 июня, 2005 Опубликовано 17 июня, 2005 · Жалоба у меня на меге 8515: ;инициализация UART_INIT: ldi R16,0 ;режим U2x=0 MPCM=0 out UCSRA,R16 ldi R16,0x98 ;режим RXCIE=1 RXEN=1 TXEN=1 out UCSRB,R16 ldi R16,0x8f ;режим UCZ=011 USBS=1 out UCSRC,R16 ldi R16,low(UART_BAUD) ;скорость out UBRRL,R16 ldi R16,high(UART_BAUD) out UBRRH,R16 <порезано> //передача байта UART_SB: out UDR,R16 ;передать UART_SB1: in R16,USR ;проверить USR.6=1? andi R16,0x40 breq UART_SB1 ;нет, передача не закончена in R16,USR ;сброс бита ori R16,0x40 out USR,R16 ret ;прерывание по приему UART_RINT: <порезано> in R16,UDR ;сохранить байт st Z,R16 <порезано> reti чего-то у тебя с инициализацией не то... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mejia 0 17 июня, 2005 Опубликовано 17 июня, 2005 · Жалоба А ты ждешь когда тебе придет буква "U"? А ты почему при инициализации не включил трансмитер? <{POST_SNAPBACK}> какой трансмиттер :( , в документации по AT90S2313 про "трансмиттер" ничего не нашел void port_init(void) { DDRB =0xFF; //init port B na vixod PORTB = 0x00; //vkl all PORTD = 0x00; //port vkl DDRD = 0x00; //vse na vxod } //call this routine to initialise all peripherals void init_devices(void) { CLI(); port_init(); uart0_init(); SetBit (SREG,7); //bit maski prerivanii MCUCR = 0x00; GIMSK = 0xF0; //obshii registr maski prerivanii GIFR = 0xF0; TIMSK = 0xFF; //0x00 TIFR=0xFF SEI(); } //UART0 initialisation // desired baud rate: 9600 // actual: baud rate:9600 (0,0%) // void uart0_init(void) { UCR = 0x00; //disable while setting baud rate UBRR = 0x17; //set baud rate // UBRR = 0x23; //set baud rate UCR = 0x09; //enable } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 17 июня, 2005 Опубликовано 17 июня, 2005 · Жалоба ....... void uart0_init(void) { UCR = 0x00; //disable while setting baud rate UBRR = 0x17; //set baud rate // UBRR = 0x23; //set baud rate UCR = 0x09; //enable <-----!!!!!! } <{POST_SNAPBACK}> Передатчик как раз включен, выключен приемник. RXEN установить надо. И прерывания от UART (RXCIE,TXCIE) почему-то выключены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться