Цитата(kolobok0 @ Aug 26 2016, 00:34)

вот jcxz скорее всего ближе к теме кмк.
Вам скорее всего правильно подсказал.
в кортексах бывает, что тактирование с разных шин идёт либо с разных предделителей.
Тут типичная картина:
Цитата(kuka_v @ Aug 25 2016, 19:30)

Сколько ни мучал гугл, сюда он меня не приводил.
Я еще раз все проверю. Вообщем то я ожидал что пройдя все что для UART0 и поправив все на значения для UART1 у меня все получится.
Но не тут то было.
Чел "мучает гугл", ковыряет наугад чужие исходники. Вместо того чтобы открыть и прочитать даташит на МК. Отсюда и все проблемы.
Любая помощь тут бессмысленна.
С семейством TM4C123 не работал, но с TM4C129 - плотно работаю сейчас. Периферия у них вроде похожая.
Ничего кроме даташита на МК и юзермануала я не читал, никаких "гуглов не мучал", но вся периферия заработала быстро, в том числе и все UART-ы.
Настраиваю тактирование ядра и сис.шины (PLL и т.п.), настраиваю пины (периферия - GPIO), потом:
PeripheralOn(concat(PERIPH_UART, nUART_service)); //подача импульса reset, включение питания и тактирования для указанной периферии
UARTinit(115200, UART_FORMAT(UART_DATA_8, UART_STOP_1, UART_PARITY_NO), &concat(UART, nUART_service)); //инит UART с номером nUART_service
и так все необходимые UART. Разрешаю прерывания и всё - работает.
Тактирование всех UART у меня от частоты сис.шины (UARTx.CC = 0).
CODE
//CCLK_MH - частота сис.шины (и ядра)
enum PERIPH {
PERIPH_WDT0 = 0x0000,
PERIPH_WDT1 = 0x0001,
PERIPH_TMR0 = 0x0010,
PERIPH_TMR1 = 0x0011,
PERIPH_TMR2 = 0x0012,
PERIPH_TMR3 = 0x0013,
PERIPH_TMR4 = 0x0014,
PERIPH_TMR5 = 0x0015,
PERIPH_TMR6 = 0x0016,
PERIPH_TMR7 = 0x0017,
PERIPH_GPIOA = 0x0020,
PERIPH_GPIOB = 0x0021,
PERIPH_GPIOC = 0x0022,
PERIPH_GPIOD = 0x0023,
PERIPH_GPIOE = 0x0024,
PERIPH_GPIOF = 0x0025,
PERIPH_GPIOG = 0x0026,
PERIPH_GPIOH = 0x0027,
PERIPH_GPIOJ = 0x0028,
PERIPH_GPIOK = 0x0029,
PERIPH_GPIOL = 0x002A,
PERIPH_GPIOM = 0x002B,
PERIPH_GPION = 0x002C,
PERIPH_GPIOP = 0x002D,
PERIPH_GPIOQ = 0x002E,
PERIPH_DMA = 0x0030,
PERIPH_EPI = 0x0040,
PERIPH_HIB = 0x0050,
PERIPH_UART0 = 0x0060,
PERIPH_UART1 = 0x0061,
PERIPH_UART2 = 0x0062,
PERIPH_UART3 = 0x0063,
PERIPH_UART4 = 0x0064,
PERIPH_UART5 = 0x0065,
PERIPH_UART6 = 0x0066,
PERIPH_UART7 = 0x0067,
PERIPH_SSI0 = 0x0070,
PERIPH_SSI1 = 0x0071,
PERIPH_SSI2 = 0x0072,
PERIPH_SSI3 = 0x0073,
PERIPH_I2C0 = 0x0080,
PERIPH_I2C1 = 0x0081,
PERIPH_I2C2 = 0x0082,
PERIPH_I2C3 = 0x0083,
PERIPH_I2C4 = 0x0084,
PERIPH_I2C5 = 0x0085,
PERIPH_I2C6 = 0x0086,
PERIPH_I2C7 = 0x0087,
PERIPH_I2C9 = 0x0088,
PERIPH_I2C10 = 0x0089,
PERIPH_USB = 0x00A0,
PERIPH_CAN0 = 0x00D0,
PERIPH_CAN1 = 0x00D1,
PERIPH_ADC0 = 0x00E0,
PERIPH_ADC1 = 0x00E1,
PERIPH_ACMP = 0x00F0,
PERIPH_PWM = 0x0100,
PERIPH_QEI = 0x0110,
PERIPH_EEPROM = 0x0160,
PERIPH_CCM = 0x01D0,
PERIPH_EMAC = 0x0270
};
//return: 1 - если соотв.периферия доступна (включена, затактирована и сигнал сброса снят с неё).
int PeripheralReady(PERIPH periph)
{
return *BITBAND_IO(&SYSCTL.PR.M[periph >> 4], periph & 15);
}
void PeripheralOn(PERIPH periph)
{
*BITBAND_IO(&SYSCTL.SR.M[periph >> 4], periph & 15) = 1;
*BITBAND_IO(&SYSCTL.PC.M[periph >> 4], periph & 15) = 1;
*BITBAND_IO(&SYSCTL.RCGC.M[periph >> 4], periph & 15) = 1;
__DMB();
*BITBAND_IO(&SYSCTL.SR.M[periph >> 4], periph & 15) = 0;
__DMB();
while (!PeripheralReady(periph));
}
//Инициализация UART.
//baudrate - скорость
//format - формат (может быть создан макросом UART_FORMAT())
//io - указатель на порты IO UART
//return: false - невозможно установить данную baudrate
bool UARTinit(u32 baudrate, u32 format, volatile HwRegsUART *io)
{
#define K 8
static u32 const tcclk[] = {CCLK_MH * (1ULL << K) / OVERSAMPLING,
CCLK_MT * (1ULL << K) / OVERSAMPLING};
u32 c, i;
io->CTL = 1 << UART_CTL_EOT | ((OVERSAMPLING == 8) ? 1: 0) << UART_CTL_HSE;
i = (format & 3) << UART_LCRH_WLEN | (format & B2) << UART_LCRH_STP2 - 2;
if ((s32)(format = (format >> 3) - 1) >= 0) i |= 1 << UART_LCRH_PEN |
(format & 1) << UART_LCRH_EPS | format >> 1 << UART_LCRH_SPS;
while (io->FR & 1 << UART_FR_BUSY);
io->LCRH = i;
io->CC = 0;
c = tcclk[cclkRun] / baudrate + (1 << K - 7);
io->IBRD = c >> K;
io->FBRD = c >> K - 6 & B6 - 1;
while (!(io->FR & 1 << UART_FR_RXFE)) { int cc = io->DR; }
io->IM = 0;
io->ICR = B13 - 1 | B16 | B17;
io->IFLS = 0 << UART_IFLS_TXIFLSEL | 2 << UART_IFLS_RXIFLSEL;
io->ECR = 15;
io->LCRH = i | 1 << UART_LCRH_FEN;
io->CTL = ((OVERSAMPLING == 8) ? 1: 0) << UART_CTL_HSE;
return true;
#undef K
}