Быстрый старт с МК K1921BK01T
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: Быстрый старт с МК K1921BK01T
А вот если бы пользовались регистрами напрямую, то таких проблем бы не возникало...
-
- Сообщения: 5
- Зарегистрирован: 15 июл 2016, 11:59
Re: Быстрый старт с МК K1921BK01T
Добрый день!
Кто нибудь сталкивался с настройкой ENC28J60 и инициализация SPI на К1921ВК01Т в IAR? Хедер и ПО под ENC28J60 с Мегой работает, а с данным контроллером как-то нестабильно, думаю, что ошибка в настройке регистров. Подскажите, кто сталкивался.
Кто нибудь сталкивался с настройкой ENC28J60 и инициализация SPI на К1921ВК01Т в IAR? Хедер и ПО под ENC28J60 с Мегой работает, а с данным контроллером как-то нестабильно, думаю, что ошибка в настройке регистров. Подскажите, кто сталкивался.
-
- Сообщения: 5
- Зарегистрирован: 15 июл 2016, 11:59
Re: Быстрый старт с МК K1921BK01T
Добрый день!
Продолжаю работу с ENC28J60, SPI сконфигурирован. но почему то не включаются прерывания по SPI.
#define IRQ_EN(NUM) *((volatile unsigned int *)(0xE000E100 + (NUM>>5)*4)) = (1<<(NUM%32));
#define IRQ_DIS(NUM) *((volatile unsigned int *)(0xE000E180 + (NUM>>5)*4)) = (1<<(NUM%32));
int main()
{
IRQ_EN(SPI0_IRQn);
}
Продолжаю работу с ENC28J60, SPI сконфигурирован. но почему то не включаются прерывания по SPI.
#define IRQ_EN(NUM) *((volatile unsigned int *)(0xE000E100 + (NUM>>5)*4)) = (1<<(NUM%32));
#define IRQ_DIS(NUM) *((volatile unsigned int *)(0xE000E180 + (NUM>>5)*4)) = (1<<(NUM%32));
int main()
{
IRQ_EN(SPI0_IRQn);
}
-
- Сообщения: 61
- Зарегистрирован: 14 дек 2015, 12:07
- Предприятие: АО НИИЭТ
- Откуда: НИИЭТ
- Контактная информация:
Re: Быстрый старт с МК K1921BK01T
Добрый день.overmars13 писал(а):Добрый день!
Продолжаю работу с ENC28J60, SPI сконфигурирован. но почему то не включаются прерывания по SPI.
Командой IRQ_EN(SPI0_IRQn) Вы разрешаете обработку прерывания на уровне контроллера прерываний Энвик.
Необходимо разрешить также генерацию прерывания самим блоком SPI, осуществив сообтветствующую настройку регистра SPI_IMSC.
-
- Сообщения: 5
- Зарегистрирован: 15 июл 2016, 11:59
Re: Быстрый старт с МК K1921BK01T
Микросхема инициализируется, но по SPI не получается чтение
пытаюсь реализовать алгоритм аналогично Меге
uint8_t enc28j60_rxtx(uint8_t data)
{
SPDR = data;
while(!(SPSR & (1<<SPIF)))
;
return SPDR;
}
#define enc28j60_rx() enc28j60_rxtx(0xff)
#define enc28j60_tx(data) enc28j60_rxtx(data)
мой код
uint8_t enc28j60_rxtx(uint8_t data)
{
while (!(NT_SPI0->SR & 0x2));
NT_SPI0->SPI_DR = data;
while ((NT_SPI0->SR & 0x8));
return NT_SPI0->SPI_DR;
}
пытаюсь реализовать алгоритм аналогично Меге
uint8_t enc28j60_rxtx(uint8_t data)
{
SPDR = data;
while(!(SPSR & (1<<SPIF)))
;
return SPDR;
}
#define enc28j60_rx() enc28j60_rxtx(0xff)
#define enc28j60_tx(data) enc28j60_rxtx(data)
мой код
uint8_t enc28j60_rxtx(uint8_t data)
{
while (!(NT_SPI0->SR & 0x2));
NT_SPI0->SPI_DR = data;
while ((NT_SPI0->SR & 0x8));
return NT_SPI0->SPI_DR;
}
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: Быстрый старт с МК K1921BK01T
Это не описание проблемы. Вы должны привести код инициализации (тегами code форума), код чтения, осциллограмму шин тактирования (SCLK), данных от мастера к слейву (MOSI), от слейва к мастеру (SOMI), чипселекта (SS), написать из какого регистра что при этом читается, и что ожидается увидеть. Тогда, может быть, вам смогут помочь. Во вложении пример работы по SPI с драйвером ключей DRV8301 от TI на K1921BK01T, может быть он пригодится.по SPI не получается чтение
- Вложения
-
- DRV8301_SPI.c
- Пример работы по SPI с драйвером ключей DRV8301 от TI на K1921BK01T
- (9.76 КБ) 310 скачиваний
-
- Сообщения: 61
- Зарегистрирован: 14 дек 2015, 12:07
- Предприятие: АО НИИЭТ
- Откуда: НИИЭТ
- Контактная информация:
Re: Быстрый старт с МК K1921BK01T
1. Вы не совсем правильно понимаете суть флагов.overmars13 писал(а):Микросхема инициализируется, но по SPI не получается чтение
пытаюсь реализовать алгоритм аналогично Меге
мой код
uint8_t enc28j60_rxtx(uint8_t data)
{
while (!(NT_SPI0->SR & 0x2));
NT_SPI0->SPI_DR = data;
while ((NT_SPI0->SR & 0x8));
return NT_SPI0->SPI_DR;
}
RFF - равен 1 когда приемный буфер заполнен совсем (8 пакетов)
RNE - равен 1 когда приемный буфер не пуст (есть хотя бы 1 пакет)
TNF - равен 1 когда передающий буфер не заполнен совсем (в нем еще есть место для хотя бы 1 пакета)
TFE - равен 1 когда передающий буфер пуст (в нем вообще нет пакетов)
2. Соответственно Ваша работа с флагами не совсем верна
3. Почему Вы не воспользовались битом BSY? он как раз отражает активность приемника и передатчика, ставится в 1 когда прием или передача активны. Или при приеме смотрите флаг RNE, когда он 1 значит пришли данные, можно читать
Re: Быстрый старт с МК K1921BK01T
недавно приобрели плату в LDM_HELPER. Рабочие материалы скачивали отсюда. Среда разработки Keil 4.72
Замечания по пдф. (версия от 15 года)
- абзац "Поле конфигурации устройства" на стр.6. При попытке вставить параметры через PAST & COPY параметр FPU2 (из набора CPU=...) оказывается на новой строке и игнорируетрся. Может стоит сделать шрифт поменьше, чтоб не было переноса, или указать что это к одной строке относится.
- здесь уже обсуждалось, что для алгоритма программирования надо выделять больше ОЗУ. Следовательно в строке с параметром FLDLL= ... -FC3000 надо поправить.
- в строке SIM = ... я бы убрал параметр -REMAP. Из-за него в симуляторе происходит подмена основной флеши с кодом программ на дополнительную. Долго не мог понять, почему кодовая область нулями заполнена.
Замечания по FLM
- В проекте ядро определено не CM4. Не принципиально - но странно.
- Причина для увеличения таймаутов (файл FlashDev.c) - для меня понятна. В функции Init(...) все временные параметры выставлены на макс. частоту 100 МГц. Соответсвенно, если МК стартует на более низких частотах (в моем случае это 16 МГц) то времена должны быть увеличены. Наверное можно привязатся к входному параметру clk при необходимости, хотя проще задрать таймауты.
- в функции EraseChip () перед циклом while() потенциальная грабля. Должно быть считывание регистра в переменную stat (как во всех функциях) а имеем NT_BOOTFLASH->FCIC = 0x1;// Clear Status reg
Еще маленькое замечание (для Keil 4 актуально). Если проект компилируется с опциями FPU (использовать аппаратный), то инициализация FPU должна происходить в функции SystemInit. Она вызывается из стартапа перед вызовом __main. Иначе зависание МК на этапе инициализации библиотек.
Пока все.Будем разбираться дальше.
Замечания по пдф. (версия от 15 года)
- абзац "Поле конфигурации устройства" на стр.6. При попытке вставить параметры через PAST & COPY параметр FPU2 (из набора CPU=...) оказывается на новой строке и игнорируетрся. Может стоит сделать шрифт поменьше, чтоб не было переноса, или указать что это к одной строке относится.
- здесь уже обсуждалось, что для алгоритма программирования надо выделять больше ОЗУ. Следовательно в строке с параметром FLDLL= ... -FC3000 надо поправить.
- в строке SIM = ... я бы убрал параметр -REMAP. Из-за него в симуляторе происходит подмена основной флеши с кодом программ на дополнительную. Долго не мог понять, почему кодовая область нулями заполнена.
Замечания по FLM
- В проекте ядро определено не CM4. Не принципиально - но странно.
- Причина для увеличения таймаутов (файл FlashDev.c) - для меня понятна. В функции Init(...) все временные параметры выставлены на макс. частоту 100 МГц. Соответсвенно, если МК стартует на более низких частотах (в моем случае это 16 МГц) то времена должны быть увеличены. Наверное можно привязатся к входному параметру clk при необходимости, хотя проще задрать таймауты.
- в функции EraseChip () перед циклом while() потенциальная грабля. Должно быть считывание регистра в переменную stat (как во всех функциях) а имеем NT_BOOTFLASH->FCIC = 0x1;// Clear Status reg
Еще маленькое замечание (для Keil 4 актуально). Если проект компилируется с опциями FPU (использовать аппаратный), то инициализация FPU должна происходить в функции SystemInit. Она вызывается из стартапа перед вызовом __main. Иначе зависание МК на этапе инициализации библиотек.
Пока все.Будем разбираться дальше.
Re: Быстрый старт с МК K1921BK01T
-FC3000 не помогает, по прежнему выдает для алгоритма программирования 0x800 байт. а были такие надежды..
Re: Быстрый старт с МК K1921BK01T
2 редактор: Как у Вас продвигается запуск микроконтроллера под Keil 4? У самого тоже дошли руки до кита LDM-Systems. Использую MDK4.53 и JetLink V8. Тоже проблема с таймаутом. Таймауты ожидания и записи увеличены в процессе экспериментов до следующих значений:
При попытке "прошить" микроконтроллер с такими значениями получаю более длительное зависание, но все равно выскакивает ошибка.
А Вам удалось побороть проблему?
Код: Выделить всё
10000, // Program Page Timeout 10000 mSec
100000, // Erase Sector Timeout 100000 mSec
А Вам удалось побороть проблему?