реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SILABS переполнение PCA0 не вызывает прерывание, PCA0 считает, флаг CF в PCA0CN выставляется, а прерывания нет.
firstvald
сообщение Apr 30 2015, 11:14
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 3-06-08
Пользователь №: 38 041



Отсмотрел все.
Прерывание разрешено : ECF в PCA0MD выставлен, EPCA0 в EIE1 выставлен. Видно, что счетчик считает и что флаг CF в PCA0CN выставляется. А прерывания нет.
Процессор 340.
Go to the top of the page
 
+Quote Post
alexunder
сообщение Apr 30 2015, 19:38
Сообщение #2


unexpected token
****

Группа: Свой
Сообщений: 751
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(firstvald @ Apr 30 2015, 13:14) *
Отсмотрел все.
Прерывание разрешено : ECF в PCA0MD выставлен, EPCA0 в EIE1 выставлен. Видно, что счетчик считает и что флаг CF в PCA0CN выставляется. А прерывания нет.
Процессор 340.

И все же: флаг EA выставлен? Скиньте сюда код инициализации системы прерываний


--------------------
Go to the top of the page
 
+Quote Post
firstvald
сообщение Apr 30 2015, 21:37
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 3-06-08
Пользователь №: 38 041



Цитата(alexunder @ Apr 30 2015, 23:38) *
И все же: флаг 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;//ïåðåõîä âûçîâåò ïðåðûâàíèå



}
Go to the top of the page
 
+Quote Post
firstvald
сообщение May 1 2015, 07:35
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 3-06-08
Пользователь №: 38 041



придется использовать обход. Для этого счетчик 3 перевожу в режим программного таймера. В PCA0CPL3 записываю 0xffff. При этом получается прерывание при достижении 0xffff, те при переходе 0xfffe->0xffff. Ну это почти 0xffff->0x10000. Разницу в 1 надо будет учитывать при рассчетах.

Код
PCA0CPM3=0;
   PCA0CPM3|=0X08;//MAT=1 программный таймер
   PCA0CPM3|=0x01;//ECCF=1  прерывание от компаратора этого регистра
  
   PCA0CPL3=0XFF;//число для сравнения  0xFFFF
   PCA0CPH3=0XFF;
Go to the top of the page
 
+Quote Post
firstvald
сообщение May 1 2015, 13:40
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 3-06-08
Пользователь №: 38 041



как написал обход на 3 регистре, так появилось прерывание от переполнения основного счетчика PCA0. что изменилось - не знаю. заремарил все что связано с 3 регистром - прерывание от переполнения основного осталось. вроде в тексте кода я никуда не лазил и состояние флагов отладчиком смотрел. непонятно.... sad.gif
Go to the top of the page
 
+Quote Post
alexunder
сообщение May 1 2015, 16:34
Сообщение #6


unexpected token
****

Группа: Свой
Сообщений: 751
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



В самом деле смахивает на баг. Хочу заметить, что силабс не утруждает себя оформлением errata (на 340 не находится). Это упоминалось не раз на их форуме в том числе.


--------------------
Go to the top of the page
 
+Quote Post
firstvald
сообщение May 1 2015, 17:31
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 3-06-08
Пользователь №: 38 041



ну я на всякий случай обрисовал ситуацию и предложил обходной метод - у кого-то что-то такое может всплыть, причем, не обязательно по 340 серии.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2017 - 20:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016