firstvald 22 30 апреля, 2015 Опубликовано 30 апреля, 2015 · Жалоба Отсмотрел все. Прерывание разрешено : ECF в PCA0MD выставлен, EPCA0 в EIE1 выставлен. Видно, что счетчик считает и что флаг CF в PCA0CN выставляется. А прерывания нет. Процессор 340. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexunder 4 30 апреля, 2015 Опубликовано 30 апреля, 2015 · Жалоба Отсмотрел все. Прерывание разрешено : ECF в PCA0MD выставлен, EPCA0 в EIE1 выставлен. Видно, что счетчик считает и что флаг CF в PCA0CN выставляется. А прерывания нет. Процессор 340. И все же: флаг EA выставлен? Скиньте сюда код инициализации системы прерываний Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 30 апреля, 2015 Опубликовано 30 апреля, 2015 · Жалоба И все же: флаг EA выставлен? Скиньте сюда код инициализации системы прерываний для пробы я смотрю как генерируется прерывание по изменению состояния ножки - все генерируется. Т е и вектор по правилному адресу и в EIE1 все как надо. Единственным битом который управляет от работающей части (можно заключить, что от или, который собирает флаги массива счетчиков все работает) до неработающей остается ECF.Но он выставлен. На силабовском форуме нашел упоминание, что для 120 кристаллов был баг, что переполнение не вызывало прерывание. Народ ржал что силабовцы его не занесли в еррату, а обозвали фичей. Про 340 не нашел(первый раз за 8 лет пользования этого проца понадобился этот узел и как то сразу не пошел). void Interrupts_Init(void) { IP = 0x20; EIE1 = 0x80; IT01CF = 0x98; // IE = 0xA0; //IE ðàçðåøåíèå ïðåðûâàíèÿìè // // EA // ESPI0 // ET2 // ES0 // ET1 // EX1 // ET0 // EX0 // //EA ESPI0 ET2 ES0 ET1 EX1 ET0 EX0 // 7 6 5 4 3 2 1 0 // 80 40 20 10 8 4 2 1 // 1 - 1 - - - - - // ET2=1; //***************************** //EIE1 // // ET3 // ECP1 êîìïàðàòîð 1 // ECP0 êîìïàðàòîð 0 // EPCA0 ìàññèâ òàéìåðîâ // EADC0 // EWADC0 // EUSB0 // ESMB0 // // ET3 ECP1 ECP0 EPCA0 EADC0 EWADC0 EUSB0 ESMB0 // 7 6 5 4 3 2 1 0 // 80 40 20 10 8 4 2 1 //ET3=1; EIE1|=0X80; EIE1|=0X10;// EPCA0 //******************************** // IP // // PSPIO // PT2 // PS0 // PT1 // PX1 // PT0 // PX0 // - PSPI0 PT2 PS0 PT1 PX1 PT0 PX0 // 7 6 5 4 3 2 1 0 // 80 40 20 10 8 4 2 1 IP=0X20; //********************************* // EIP1 // // PT3 // PCP1 êîìïàðàòîð 1 // PCP0 // PPCA0 // PADC0 // PWADC0 // PUSB0 // PSMB0 // // // PT3 PCP1 PCP0 PPCA0 PADC0 PWADC0 PUSB0 PSMB0 // 7 6 5 4 3 2 1 0 // 80 40 20 10 8 4 2 1 EIP1=0X80; EA=1; } void PCA_Init(void) { PCA0MD &= ~0x40;//çàïðåòèëè ñîáàêó PCA0MD=0x00; PCA0CN=0x00; //Âèáèðàåì èñòî÷íèê òàêòèðîâàíèÿ äëÿ ðåãèñòðà-ñ÷åò÷èêà PCA0H PCA0MD&=~0x0e;//òàêòèðóåì îò SYSCLK/12 // PCA0MD|=0x02;//òàêòèðóåì îò SYSCLK/4 // PCA0MD|=0x04;//òàêòèðóåì îò T0 // PCA0MD|=0x06;//òàêòèðóåì îò íîæêè ECI // PCA0MD|=0x08;//òàêòèðóåì îò SYSCLK PCA0MD|=0x0A;//òàêòèðóåì îò EXOSC/8 EA=1; EIE1|=0X10; PCA0MD|=0x01;//ECF=1 ðàçðåøàåì ïðåðûâàíèå //PCA0MD&=~1;//ECF=0 ðàçðåøàåì ïðåðûâàíèå PCA0H=0; PCA0L=0; PCA0CPM0=0; PCA0CPM1=0; PCA0CPM2=0; PCA0CPM3=0; PCA0CPM4=0; // PCA0CPM5=0; //íà÷èíàåì ñ÷åò PCA0MD&=~0X80;//CIDL=0; //PCA0MD|=0X80;//CIDL=1; PCA0CN|=0x40;//CR=1 ðàçðåøàåì ñ÷åò //PCA0CN = 0x40; // PCA0MD &= ~0x40; // PCA0MD = 0x0B; // PCA0CPL4 = 0x00; // PCA0MD |= 0x40; //ïåðåâîäèì 0 çàùåëêó â ðåæèì çàõâàòà ïî ïåðåõîäó 0->1 //PCA0CPM0|=0x20;//çàõâàò ïî ïåðåõîäó 0->1 PCA0CPM0|=0x10;//çàõâàò ïî ïåðåõîäó 1->0 PCA0CPM0|=0x01;//ïåðåõîä âûçîâåò ïðåðûâàíèå } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 1 мая, 2015 Опубликовано 1 мая, 2015 · Жалоба придется использовать обход. Для этого счетчик 3 перевожу в режим программного таймера. В PCA0CPL3 записываю 0xffff. При этом получается прерывание при достижении 0xffff, те при переходе 0xfffe->0xffff. Ну это почти 0xffff->0x10000. Разницу в 1 надо будет учитывать при рассчетах. PCA0CPM3=0; PCA0CPM3|=0X08;//MAT=1 программный таймер PCA0CPM3|=0x01;//ECCF=1 прерывание от компаратора этого регистра PCA0CPL3=0XFF;//число для сравнения 0xFFFF PCA0CPH3=0XFF; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 1 мая, 2015 Опубликовано 1 мая, 2015 · Жалоба как написал обход на 3 регистре, так появилось прерывание от переполнения основного счетчика PCA0. что изменилось - не знаю. заремарил все что связано с 3 регистром - прерывание от переполнения основного осталось. вроде в тексте кода я никуда не лазил и состояние флагов отладчиком смотрел. непонятно.... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexunder 4 1 мая, 2015 Опубликовано 1 мая, 2015 · Жалоба В самом деле смахивает на баг. Хочу заметить, что силабс не утруждает себя оформлением errata (на 340 не находится). Это упоминалось не раз на их форуме в том числе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 22 1 мая, 2015 Опубликовано 1 мая, 2015 · Жалоба ну я на всякий случай обрисовал ситуацию и предложил обходной метод - у кого-то что-то такое может всплыть, причем, не обязательно по 340 серии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться