Быстрый старт с МК K1921BK01T

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

Аватара пользователя
Лашкевич
Сообщения: 372
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение Лашкевич »

А вот если бы пользовались регистрами напрямую, то таких проблем бы не возникало...
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
overmars13
Сообщения: 5
Зарегистрирован: 15 июл 2016, 11:59

Re: Быстрый старт с МК K1921BK01T

Сообщение overmars13 »

Добрый день!
Кто нибудь сталкивался с настройкой ENC28J60 и инициализация SPI на К1921ВК01Т в IAR? Хедер и ПО под ENC28J60 с Мегой работает, а с данным контроллером как-то нестабильно, думаю, что ошибка в настройке регистров. Подскажите, кто сталкивался.
overmars13
Сообщения: 5
Зарегистрирован: 15 июл 2016, 11:59

Re: Быстрый старт с МК K1921BK01T

Сообщение overmars13 »

Добрый день!
Продолжаю работу с 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);
}
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение hgost »

overmars13 писал(а):Добрый день!
Продолжаю работу с ENC28J60, SPI сконфигурирован. но почему то не включаются прерывания по SPI.
Добрый день.
Командой IRQ_EN(SPI0_IRQn) Вы разрешаете обработку прерывания на уровне контроллера прерываний Энвик.
Необходимо разрешить также генерацию прерывания самим блоком SPI, осуществив сообтветствующую настройку регистра SPI_IMSC.
overmars13
Сообщения: 5
Зарегистрирован: 15 июл 2016, 11:59

Re: Быстрый старт с МК K1921BK01T

Сообщение overmars13 »

Микросхема инициализируется, но по 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;

}
Аватара пользователя
Лашкевич
Сообщения: 372
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение Лашкевич »

по SPI не получается чтение
Это не описание проблемы. Вы должны привести код инициализации (тегами code форума), код чтения, осциллограмму шин тактирования (SCLK), данных от мастера к слейву (MOSI), от слейва к мастеру (SOMI), чипселекта (SS), написать из какого регистра что при этом читается, и что ожидается увидеть. Тогда, может быть, вам смогут помочь. Во вложении пример работы по SPI с драйвером ключей DRV8301 от TI на K1921BK01T, может быть он пригодится.
Вложения
DRV8301_SPI.c
Пример работы по SPI с драйвером ключей DRV8301 от TI на K1921BK01T
(9.76 КБ) 308 скачиваний
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение hgost »

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;
}
1. Вы не совсем правильно понимаете суть флагов.
RFF - равен 1 когда приемный буфер заполнен совсем (8 пакетов)
RNE - равен 1 когда приемный буфер не пуст (есть хотя бы 1 пакет)
TNF - равен 1 когда передающий буфер не заполнен совсем (в нем еще есть место для хотя бы 1 пакета)
TFE - равен 1 когда передающий буфер пуст (в нем вообще нет пакетов)
2. Соответственно Ваша работа с флагами не совсем верна
3. Почему Вы не воспользовались битом BSY? он как раз отражает активность приемника и передатчика, ставится в 1 когда прием или передача активны. Или при приеме смотрите флаг RNE, когда он 1 значит пришли данные, можно читать
редактор
Сообщения: 27
Зарегистрирован: 08 ноя 2016, 09:10

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. Иначе зависание МК на этапе инициализации библиотек.
Пока все.Будем разбираться дальше.
редактор
Сообщения: 27
Зарегистрирован: 08 ноя 2016, 09:10

Re: Быстрый старт с МК K1921BK01T

Сообщение редактор »

-FC3000 не помогает, по прежнему выдает для алгоритма программирования 0x800 байт. а были такие надежды..
Andrei88
Сообщения: 2
Зарегистрирован: 17 фев 2017, 14:04

Re: Быстрый старт с МК K1921BK01T

Сообщение Andrei88 »

2 редактор: Как у Вас продвигается запуск микроконтроллера под Keil 4? У самого тоже дошли руки до кита LDM-Systems. Использую MDK4.53 и JetLink V8. Тоже проблема с таймаутом. Таймауты ожидания и записи увеличены в процессе экспериментов до следующих значений:

Код: Выделить всё

10000,                        // Program Page Timeout 10000 mSec
100000,	                    // Erase Sector Timeout 100000 mSec
При попытке "прошить" микроконтроллер с такими значениями получаю более длительное зависание, но все равно выскакивает ошибка.
А Вам удалось побороть проблему?
Ответить

Вернуться в «32-разрядные микроконтроллеры»