Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Инициализация UART0
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void UART0_Open(unsigned long baud)
{
IO0CLR |= (1 << GL_BUS_DIR); //Включим RS485 на прием
IO0DIR |= (1 << GL_BUS_DIR);
// set port pins
PINSEL0 &= ~(3 << PINSEL0_P0_0);
PINSEL0 |= (PINSEL_FUNC_01 << PINSEL0_P0_0);PINSEL0 &= ~(3 << PINSEL0_P0_1);
PINSEL0 |= (PINSEL_FUNC_01 << PINSEL0_P0_1);// initialize the interrupt vector
VICIntSelect &= ~(1 << VIC_UART0);
VICVectAddr1 = (unsigned long)UART0_Handler;
VICVectCntl1 = (1 << VIC_CHNL_ENABLE_BIT) | VIC_UART0;
VICIntEnable |= (1 << VIC_UART0);
U0FCR = (1 << U0FCR_FIFO_Enable_BIT) | (1 << U0FCR_Tx_FIFO_Reset_BIT) | (1 << U0FCR_Rx_FIFO_Reset_BIT);// set the number of characters and other
U0LCR = (0x03 << U0LCR_Word_Length_Select_BIT);// set the baudrate
U0LCR |= (1 << U0LCR_Divisor_Latch_Access_Bit_BIT);
U0DLL = ((unsigned char)(PCLK/(baud*16)) & 0xff);
U0DLM = ((unsigned char)((PCLK/(baud*16)) >> 8)) & 0xff;
U0LCR &= ~(1 << U0LCR_Divisor_Latch_Access_Bit_BIT);
uart0.rx_tail = 0;
uart0.tx_tail = 0;
uart0.rx_head = 0;
uart0.tx_head = 0;//enable transive interrupt
U0IER |= (1 << U0IER_THRE_Interrupt_Enable_BIT) | (1 << U0IER_RBR_Interrupt_Enable_BIT);
}