Цитата(jcxz @ Jan 18 2017, 11:03)

1.Устанавливаете запрос синхронного сброса
Код
T0TCR = 0x00000002;
но не дожидаетесь его окончания. Значит сброс у Вас реально может происходить после последующих записей конфигурации.
jcxz, это значит что после операции T0TCR = 0x00000002; нужно проверить сбросился ли ТС и только потом продолжать конфигурацию?
Цитата(jcxz @ Jan 18 2017, 11:03)

2.Не чистите регистр флагов запросов прерываний.
Его обязательно чистить в конфигурации таймера? Читал в юзер мануал что по сбросу он очищен.
Цитата(jcxz @ Jan 18 2017, 11:03)

3.Неправильно рассчитываете период:
Код
//Регистр совпадения = 1000 (1 Гц)
T0MR0 = 100;
jcxz, так правильно будет?
Код
PCLKSEL0 |= 0x0000000E; //Timer0Clk=72Mhz/8= 9 MHz
}
void Timer0_Init(void){
//Предделитель таймера = 8999
T0PR = 8999;
//Сбросить счетчик и делитель
T0TCR = 0x00000002;
//Режим таймера
Т0СТСR = 0;
//При совпадении сбрасываем таймер и вызываем прерывание
T0MCR = 0x00000003;
//Регистр совпадения = 1000 (1 Гц)
T0MR0 = 1000;
Цитата(jcxz @ Jan 18 2017, 11:03)

Как можно было сделать столько ошибок в такой простейшей периферии???
Читайте внимательнее юзермануал!
Да и в CTCR неплохо бы соотв. значение записать.
До этого я программировал только AVR (mega) на Ассемблере. В С, можно сказать, я полный балбес, только учусь.
Цитата(jcxz @ Jan 18 2017, 11:03)

После этого смотрите появляется ли флаг активного запроса прерывания в IR?
И если появляется, а входа в ISR нет - читайте про контроллер прерываний и всё что с ним связано.
В бесконечный цикл вставлял такой код
Код
//if (T0IR & (1 << 0)) {FIO2CLR = (1<<13); //Зажгли светодиод |
// T0TCR = 0x00000000; //Остановили таймер - счётчик |
// T0IR = 0x00000001; //сбросили флаг прерывания |Ловушка
// T0TCR = 0x00000002; //сбросили таймер - счётчик |
// T0TCR = 0x00000001;} //запустили таймер - счётчик |
// else {FIO2SET = (1<<13);}
и по светодиоду видел, что 0 бит T0IR с определённым периодом устанавливается (таймер входит в прерывание).
Цитата(jcxz @ Jan 18 2017, 11:03)

По контроллеру прерываний:
1.А где у Вас глобальное разрешение прерываний IRQ? (Вы ведь вроде этому прерыванию от таймера назначаете линию IRQ?)
Это не оно VICIntEnable |= 0x00000010;?
Цитата(jcxz @ Jan 18 2017, 11:03)

2.А где обработчик прерывания IRQ?
Вроде это обработчик прерывания
Код
__irq void Timer0_Int (void)
{
if (n!=0x2000000) {n<<=1;}
else {n = 0x04000000;}
T0IR = 0x00000001; /*Сбросить флаг прерывания в Timer0*/
//Бегущая единица
IOSET1 = 0x3C000000;
IOCLR1 = n; /* Установить состояние порта */
VICVectAddr = 0; /*Перевести VIC в исходное состояние*/
}
Пробовал я писать имена битов в регистрах, как в других примерах из интернета, но IAR выдаёт на них ошибки. Нужны, видимо какие-то библиотеки, ноя пока не пойму какие и где их брать.
Ребята выше привели много разных примеров кода, ноя их не понимаю. Буду пробовать разбираться.