12.11.2009, 17:53
|
|
Частый гость
Регистрация: 10.11.2006
Адрес: Київ
Сообщений: 34
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Здравствуй, ARM. Запуск "на коленке"
Объясните что такое IRQ slots.
|
|
|
|
12.11.2009, 17:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Alexey_1811
|
Если прописываю VICDefVecyAddr = 0x00000120 то в прерывание попадаю (Хотя я понимаю что это через ж...у).
|
Попробуйте включить векторизацию для канала прерываний.
VICDefVectAddr - Default Vector Address Register. This register holds the address of the Interrupt Service routine (ISR) for non-vectored IRQs.
Код:
|
VICIntSelect=0x00000000;
VICVectAddr0=(unsigned int)Tmr0_func;
VICVectCntl0=0x24; //Vectorization enabled(0x20), source 4(TMR0)
VICIntEnable=Tmr0_Src; //(1‹‹4) |
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
12.11.2009, 18:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от AJScorp
|
VICVectCntl0=0x24; //Vectorization enabled(0x20), source 4(TMR0)
|
Да, в LPC2468 эти регистры отвечают только за приоритет.
|
|
|
|
12.11.2009, 18:19
|
|
Частый гость
Регистрация: 10.11.2006
Адрес: Київ
Сообщений: 34
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Здравствуй, ARM. Запуск "на коленке"
Передачу настроил
/* initialize the serial interface */
PINSEL0 = 0x00050000; /* Enable RxD1 and TxD1 */
U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
U1DLL = 97; /* 9600 Baud Rate @ 15MHz VPB Clock */
U1LCR = 0x03;
Как сделать чтобы по приходу байта вызывалось прерывание. (Желательно с использованием ФИФО)
|
|
|
|
12.11.2009, 18:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Alexey_1811
|
Как сделать чтобы по приходу байта вызывалось прерывание. (Желательно с использованием ФИФО)
|
Инициализация у меня:
void InitUART(byte baud){
U0LCR=0x87;
U0DLL=baud;
U0DLM=baud ›› 8;
U0LCR=0x07;
U0FCR=0xC7; //0b11000111
U0IER=0x05;
U0TER=0x80;
PINSEL0=(PINSEL0 & ~(0x0F ‹‹ 4)) | (0x05 ‹‹ 4);
VICVectAddr6=(unsigned)UART_Handler;
VICVectCntl6=0x08; //приоритет
VICIntEnable = (1 ‹‹ 6); //разрешаем UART interrupt
}
не забывайте только про правильную инициализацию своего VICVectCntl, у меня это приоритет
|
|
|
|
12.11.2009, 18:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Обработчик:
__irq void UART_Handler (void){
dword idval;
idval=U0IIR;
idval=(idval & 0x0F) ›› 1;
switch (idval) {
case 0x01: //TX buffer empty
if (UARTTransCount) {
U0THR=*UARTTransPtr;
UARTTransCount--;
UARTTransPtr++;
}
else {UART_TX_Complete=1;
U0IER=0x05; //запрещаем прерывание TX empty
};
break;
case 0x02:
case 0x06: //Получены данные
if (UART_RX_Complete)
{
while (U0LSR & 0x01) U0RBR;
UARTRXTimer=0;
}
else {
if (!UARTRXTimer || !UARTPacketSize) {UARTPacketSize=U0RBR;
if (UARTPacketSize›5) {UARTRecCount=1;
*UARTRecBuff=UARTPacketSize;
}
else {UARTRecCount=0;
UARTPacketSize=0;
};
};
while (U0LSR & 0x01) {
// Считываем символ
UARTRecBuff[UARTRecCount]=U0RBR;
UARTRecCount++;
if (UARTRecCount›=UARTPacketSize) {UART_RX_Complete=1;
while (U0LSR & 0x01) U0RBR;
};
};
if (!UART_RX_Complete) UARTRXTimer=MaxUARTByteSpace;
else UARTRXTimer=0;
}; //else if (UART_RX_Complete)
break;
default: //ошибка
UARTRXTimer=0;
UARTPacketSize=0;
break;
};
VICVectAddr=0;
}
Ну тут у меня упоминаются буферы приема и счетчики. FIFO вроде используется
|
|
|
Эти 2 пользователя(ей) сказали Спасибо pambaru за это сообщение:
|
|
|
12.11.2009, 18:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
while (U0LSR & 0x01) {
// Считываем символ
.....
}
как раз чтение из фифо
|
|
|
|
13.11.2009, 00:07
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Дальше будет!
Спасибо всем проголосовавшим и ответившим, нарисовался такой план:
- Изучаем ввод-вывод на ARM архитектуре. Начнем с небольшого введения об адресном пространстве ARM и классифицируем архитектуру среди других известных. Потом рассмотрим GPIO vs Fast IO, вход, выход, pull-up, pull-down. Вкл./выкл. светодиод одной кнопкой.
- Учимся правильно тактировать ARM. Выбор источника тактовой частоты, умножение частоты, введение в PLL, настройка и использование PLL
- Связываем контроллер с внешним миром: USART (синхронный) и компьютер. Смотрим на результаты работы микропрограммы через терминал на компьютере
- Таймеры и прерывания
Выполняем четко и последовательно. После этого мы будем очень близки к USB.
П.С.: "Запугивателям" вещающих "о сложности ARM", "об исключительной особенности этой архитектуры", "о жизненной необходимости изучать новую архитектуру с сеточных вычислений и кластеров", "о великом VIC'e" советую не терять время, ведь скоро на рынке ARM-труда станет тесно (не без нашей помощи ) Лучше просто заранее повышайте свою квалификацию и не несите "заумь", новичкам не это нужно, а профессионалы и так всё давно знают. В 8-ми разрядных машинках это всё тоже доступно, ровно как и в персональных компьютерах.
Помним, что "железка", это всего лишь средство для "хостинга" наших программ. А это как "хостинг" вэб-сайта, главное чтобы было надежно, много, быстро и дешево.
Если делаете качественный софт, то он прекрасно будет себя чувствовать как в "тесненькой" ATtiny (AVR), так и в жирном LPC2368 (ARM7).
Удачи!
|
|
|
Эти 27 пользователя(ей) сказали Спасибо alexgap за это сообщение:
|
Andreisela (13.11.2009), ASU1956 (05.05.2010), CERGEI1982 (13.11.2009), Djakovskij (07.01.2012), Eleman11 (08.12.2009), eliseevrci (14.11.2009), FreshManGood (03.01.2015), gdtron (28.09.2010), Gerbicid (13.11.2009), GremLine (23.12.2010), Highlander (22.12.2010), jek_point (17.10.2011), lanceloth (22.02.2010), lvadia (04.12.2009), MisterDi (13.11.2009), mousew1 (16.04.2010), pinco (09.11.2010), renatavr (13.11.2009), revector (13.09.2010), savarez (13.11.2009), toxxinus (20.11.2009), ua4nfx (16.11.2009), Uz_Sleep_Walker (13.11.2009), xinod (13.11.2009) |
|
13.11.2009, 13:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Выкладываю пример проекта.
В нем есть корректная инициализация периферии
|
|
|
Эти 8 пользователя(ей) сказали Спасибо Gnider за это сообщение:
|
|
|
13.11.2009, 22:22
|
|
Частый гость
Регистрация: 09.11.2007
Сообщений: 28
Сказал спасибо: 3
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от mrKirill
|
Те кто предлагал часы на основе RTC + плюшки - намного разумнее подход.
|
В общем согласен, хотя голосовал за USB.
USB это из разряда "дорвались", то чего всегда не хватало, плюс у AVR особых хитростей в работе с портами нет, а здесь как я понимаю собрались люди которым мелких контроллеров не хватает, а более крупный попробовать не получилось.
Более подробное руководство по серии LPC23xx
http://www.nxp.com/acrobat_download/.../UM10211_1.pdf
Последний раз редактировалось colombo_2006; 13.11.2009 в 22:34.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:32.
|
|