Перейти к содержанию
    

Karnav

Новичок
  • Постов

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Спасибоб уважаемый zombi!! Вы действительно правы, моя банальная невнимательность
  2. Здравствуйте, помогите разобраться c Tx! Rx работает на всех USART. Мне нужно 4 USART, USARTE0,USARTE1,USARTF0,USARTF1. После инициализации из работают только USARTE0 и USARTF0. Проверял PORTC, на нем тоже только работает только USARTC0. Проверял на xmega128a1 и xmega128a1u. USARTC1, USARTE1, USARTF1 инициализирую аналогично с USARTE0, USARTF0, USARTC0 Даташит утверждает, что это всe полноценные USARTы. #include <avr/io.h> #define F_CPU 32000000UL //#define USART_CLK 115200L #define USART_CLK 110400L #include <util/delay.h> unsigned char i,cnt,y, canal; void setUpSerial() { USART_CHSIZE_8BIT_gc; USARTC0.BAUDCTRLA=(F_CPU/(16*USART_CLK))-1; // baud rate calculation assuming that BSCALE=0; USARTC0.BAUDCTRLB=0x00; USARTE0.BAUDCTRLA=(F_CPU/(16*USART_CLK))-1; // baud rate calculation assuming that BSCALE=0; USARTE0.BAUDCTRLB=0x00; USARTE1.BAUDCTRLA=(F_CPU/(16*USART_CLK))-1; // baud rate calculation assuming that BSCALE=0; USARTE1.BAUDCTRLB=0x00; USARTF0.BAUDCTRLA=(F_CPU/(16*USART_CLK))-1; // baud rate calculation assuming that BSCALE=0; USARTF0.BAUDCTRLB=0x00; USARTF1.BAUDCTRLA=(F_CPU/(16*USART_CLK))-1; // baud rate calculation assuming that BSCALE=0; USARTF1.BAUDCTRLB=0x00; USARTC0_CTRLA = 0; USARTE0_CTRLA = 0; USARTE1_CTRLA = 0; USARTF0_CTRLA = 0; USARTF1_CTRLA = 0; //8 data bits, no parity and 1 stop bit USARTC0_CTRLC = USART_CHSIZE_8BIT_gc; USARTE0_CTRLC = USART_CHSIZE_8BIT_gc; USARTE1_CTRLC = USART_CHSIZE_8BIT_gc; USARTF0_CTRLC = USART_CHSIZE_8BIT_gc; USARTF1_CTRLC = USART_CHSIZE_8BIT_gc; //Enable receive and transmit USARTC0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode USARTE0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode USARTE1_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode USARTF0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode // USARTF1_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode USARTF1_CTRLB = USART_TXEN_bm ; PORTC_OUTSET = PIN3_bm; PORTC_DIRSET = PIN3_bm; PORTC_OUTCLR = PIN2_bm; PORTC_DIRCLR = PIN2_bm; PORTF_OUTSET = PIN3_bm; PORTF_DIRSET = PIN3_bm; PORTF_OUTCLR = PIN2_bm; PORTF_DIRCLR = PIN2_bm; PORTF_OUTSET = PIN6_bm; PORTF_DIRSET = PIN6_bm; PORTF_OUTCLR = PIN7_bm; PORTF_DIRCLR = PIN7_bm; PORTE_OUTSET = PIN3_bm; PORTE_DIRSET = PIN3_bm; PORTE_OUTCLR = PIN2_bm; PORTE_DIRCLR = PIN2_bm; PORTE_OUTSET = PIN6_bm; PORTE_DIRSET = PIN6_bm; PORTE_OUTCLR= PIN7_bm; PORTE_DIRCLR = PIN7_bm; } void setClockTo32MHz() { OSC.CTRL = OSC_RC32MEN_bm; //0b00010 // enable 32MHz oscillator while(!(OSC.STATUS & OSC_RC32MRDY_bm)); //0b00010 // wait for oscillator to be ready CCP = CCP_IOREG_gc;//0xD8 // disable register security for clock update CLK.CTRL = CLK_SCLKSEL_RC32M_gc; //0b001 // switch to 32MHz clock } void sendChar_USARTC0(char c) { while( !(USARTC0_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty USARTC0_DATA = c; } void sendChar_USARTF0(char c) { while( !(USARTF0_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty USARTF0_DATA = c; } void sendChar_USARTF1(char c) { while( !(USARTF1_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty USARTF1_DATA = c; } void sendChar_USARTE0(char c) { while( !(USARTE0_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty USARTE0_DATA = c; } void sendChar_USARTE1(char c) { while( !(USARTE1_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty USARTE1_DATA = c; } void sendString(char *text) { while(*text) { sendChar(*text++); } } int main(void) { setUpSerial(); setClockTo32MHz(); while(1) { _delay_ms(500); sendChar_USARTC0('R'); sendChar_USARTF0('S'); //_delay_ms(1); sendChar_USARTE1('T'); //_delay_ms(1); sendChar_USARTF1('M'); //_delay_ms(1); sendChar_USARTE0('G'); } }
×
×
  • Создать...