1887ВЕ3Т

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

Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

_sva_ писал(а): 2. Обойти можно. Если CAN имеет только одну возможность обращения по адресам (0E800 - 0EFFF) и все разряды адресов используются для декодирования, то обращаться к CAPCOM можно и по адресам, например, 1E890-1E8D8 или 6E890-6E8D8 и все должно корректно работать.
Не прошло и 2-ух лет как я получил ваш контроллер. Что-то не получается у меня к CAPCOM обратиться, уж я и 0x6008 в XADDR4 писал и 0x6E83. Так это возможно все-таки? Или только 0x0E83?
Sanek
Сообщения: 56
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

Не совсем верно использовать в качестве StartUpa файл START_V2.a66, лучше использовать START167.A66.
Настройку шины XBUS необходимо сделать до команды EINIT.
Недавно была выявлена проблема из-за которой одновременная работа с CAN и CC6 была невозможна, но был найден обход этой проблемы: для регистра XADRS4 указываем память через, например, шестой сегмент. Пример кода инициализации шины XBUS для одновременной работы CAN и CC6:
MOV R1, #0009H
EXTR #1H
MOV XPERCON, R1
NOP
NOP
MOV R1, #0E93H
EXTR #1H
MOV XADRS1, R1
NOP
NOP
MOV R1, #14BFH ;16-bit demux
EXTR #1H
MOV XBCON1, R1
NOP
NOP
MOV R1, #06E80H
EXTR #1H
MOV XADRS4, R1
NOP
NOP
MOV R1, #04BFH
EXTR #1H
MOV XBCON4, R1
NOP
NOP
EINIT
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

Sanek писал(а):Не совсем верно использовать в качестве StartUpa файл START_V2.a66, лучше использовать START167.A66.
Ну, дело не в имени файла, а в том что в нем написано: от исходного START_V2.a66 там одно название.
Sanek писал(а): Настройку шины XBUS необходимо сделать до команды EINIT.
Сделал, хотя по моим ощущениям это не обязательно.
Sanek писал(а): Недавно была выявлена проблема из-за которой одновременная работа с CAN и CC6 была невозможна, но был найден обход этой проблемы: для регистра XADRS4 указываем память через, например, шестой сегмент. Пример кода инициализации шины XBUS для одновременной работы CAN и CC6:
Наверно я стал старый. Настроил все как вы говорите. В k1887ve3t.h передефайнил регистры:

Было:

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

#define  CCU6_T12 (*((unsigned int volatile sdata *) 0xE890))

Стало:

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

 #define  CCU6_T12 (*((unsigned int volatile huge *) 0x6E890))
Ничего не работает.
Sanek
Сообщения: 56
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

В k1887ve3t.h передефайнил регистры:
Так делать не надо
------------------------
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

Sanek писал(а):
В k1887ve3t.h передефайнил регистры:
Так делать не надо
А как надо?

Настраиваю XADRS4/XBCON4 только для CAPCOM6, CAN - выключен (XBCON1=0).
Если передефайнить - просто не работает, если не передефайнить - все виснет (я так думаю возникает ILLBUS).
Sanek
Сообщения: 56
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

CCU6_MODCTR=(1<<7)| //Multi channel mode
(1<<8); //T3->CC60
Данный вариант выдает синусоиду на СС60(вывод P1L0), при этом ССOUT63(P1L6) не должен выдавать сигнал, так как выключен ECT13O
Что бы одновременно выдавать сигнал синусоида на СС60 и CCOUT63 необходимо сделать так:
CCU6_MODCTR = (1<<7)| (1<<8) | (1<<15);

Проверили на своей макетной плате.
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

Sanek писал(а):
CCU6_MODCTR=(1<<7)| //Multi channel mode
(1<<8); //T3->CC60
Данный вариант выдает синусоиду на СС60(вывод P1L0), при этом ССOUT63(P1L6) не должен выдавать сигнал, так как выключен ECT13O
Что бы одновременно выдавать сигнал синусоида на СС60 и CCOUT63 необходимо сделать так:
CCU6_MODCTR = (1<<7)| (1<<8) | (1<<15);

Проверили на своей макетной плате.
Спасибо, что тратите на меня свое время.
Проблема в том что сигнал на СС60 не имеет ничего общего с синусом. В программе есть прерывание для переинициализации ПЕК, оно должно вызываться с частотой 20000/10 точек = 2000 Гц. При выдаче синуса с ССOUT63 все так и происходит, при перенаправлении выхода Т3 на СС60 прерывания начинают сыпаться чаще. Для наглядности я прикрепляю два рисунка с Осциллографа (в одном случае - на выходе синус, в другом не пойми что). Я полагал, что перенаправление никак не должно оказывать влияние на формирование прерывании от CAPCOM6, но модуль работает как-то иначе.
Вложения
sinus.zip
(5.86 КБ) 162 скачивания
Sanek
Сообщения: 56
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

Denis, пришлите пожалуйста два *.hex файла:
- ШИМ на выход CCOUT63
- ШИМ на выход СС60
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

Sanek писал(а):Denis, пришлите пожалуйста два *.hex файла:
- ШИМ на выход CCOUT63
- ШИМ на выход СС60
Высылаю.
Вложения
caphex.zip
(1.86 КБ) 164 скачивания
yrk
Сообщения: 12
Зарегистрирован: 05 май 2014, 13:47

Re: 1887ВЕ3Т

Сообщение yrk »

Denis писал(а):
Sanek писал(а):Не совсем верно использовать в качестве StartUpa файл START_V2.a66, лучше использовать START167.A66.
Ну, дело не в имени файла, а в том что в нем написано: от исходного START_V2.a66 там одно название.
Sanek писал(а): Настройку шины XBUS необходимо сделать до команды EINIT.
Сделал, хотя по моим ощущениям это не обязательно.
Sanek писал(а): Недавно была выявлена проблема из-за которой одновременная работа с CAN и CC6 была невозможна, но был найден обход этой проблемы: для регистра XADRS4 указываем память через, например, шестой сегмент. Пример кода инициализации шины XBUS для одновременной работы CAN и CC6:
Наверно я стал старый. Настроил все как вы говорите. В k1887ve3t.h передефайнил регистры:

Было:

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

#define  CCU6_T12 (*((unsigned int volatile sdata *) 0xE890))

Стало:

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

 #define  CCU6_T12 (*((unsigned int volatile huge *) 0x6E890))
Ничего не работает.
Я тоже наверное стал старый :D
У меня так тоже не заработало, хотя делал по совету Шеховцова. Ну, по крайней мере, сходу не заработало... А времени ковыряться нет. К тому же ремап в 6-ой или какой еще сегмент приводит к адресации через переопределение сегмента или страницы данных вместо работы с ближней памятью.
Поэтому я оставил свои макросы на входе и выходе всех процедур, где используются регистры CAN и CCU6. Эти макросы просто открывают и закрывают адресные окна. Вот они:
#define RestoreCAN // Restore access (if it was) to CAN address window
// after CAN usage instead of access refusal (DisableCAN)

#ifndef RestoreCAN
#define DisableCAN
#endif

#ifdef DisableCAN // Close access to CAN address window after usage

// Get_CAN_Access must be invoked before any access to CAN register
#define Get_CAN_Access __asm { /* Open CAN address window */ \
__asm EXTR #3 \
__asm PUSH XBCON4 /* save XBCON4 value */ \
__asm AND XBCON4,#0xFBFF /* disable XCS4 (CCU6) */ \
__asm OR XBCON1,#0x400 /* enable XCS1 (CAN) */ \
}

// Reset_CAN_Access must be invoked after CAN registers using
#define Reset_CAN_Access __asm { /* Close CAN address window */ \
__asm EXTR #2 \
__asm AND XBCON1,#0xFBFF /* disable XCS1 (CAN) */ \
__asm POP XBCON4 /* restore XBCON4 value */ \
}

#endif


#ifdef RestoreCAN // Restore access to CAN address window after usage

// Get_CAN_Access must be invoked before any access to CAN register
#define Get_CAN_Access __asm { /* Open CAN address window */ \
__asm EXTR #4 \
__asm PUSH XBCON4 /* save XBCON4 value */ \
__asm PUSH XBCON1 /* save XBCON1 value */ \
__asm AND XBCON4,#0xFBFF /* disable XCS4 (CCU6) */ \
__asm OR XBCON1,#0x400 /* enable XCS1 (CAN) */ \
}

// Reset_CAN_Access must be invoked after CAN registers using
#define Reset_CAN_Access __asm { /* Restore CAN address window */ \
__asm EXTR #2 \
__asm POP XBCON1 /* restore XBCON1 value */ \
__asm POP XBCON4 /* restore XBCON4 value */ \
}

#endif

Здесь использована условная компиляция: в зависимости от объявления RestoreCAN, окно CAN при использовании в конце процедуры либо закрывается макросом Reset_CAN_Access, либо возвращаются старые настройки. Такие же объявил для CCU6. Идея, думаю, понятна.
Если обращений к регистрам периферии много, такой подход даже сэкономит и место в памяти, и время исполнения, благодаря ближней адресации. Но есть недостаток. Как для JTAG не знаю, а при использовании отладки по старинке через USART (MON166) нужно не забывать закрывать все окна отладчика (или менять адреса), где светится состояние регистров периферии (CAN или CCU6), если следующая остановка будет после Reset_CAN_Access. Так как доступ к области памяти будет закрыт, но MON166 ничего об этом не знает, начнет считывать... А ВЕ3Т почему-то в такой ситуации виснет вместо выдачи 0xFFFF
Ответить

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