1887ВЕ3Т

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

_sva_
Специалист
Сообщения: 215
Зарегистрирован: 12 ноя 2009, 17:42
Откуда: Воронеж
Контактная информация:

Re: 1887ВЕ3Т

Сообщение _sva_ »

AlexD писал(а): 3. Не удается настроить область памяти XRAM расположенную по адресам 0xD800 - 0xE7FF. Регистры управления шиной XBUS задаю следующим образом:

XADRS2 = 0x0D83
XBCON2 = 0x04BF
XADRS3 = 0x0E03
XBCON3 = 0x04BF

При попытке чтения слова по адресу 0xD800 всегда читается 0xFFFF. Может быть записываемые в регистры XADRSx/XBCONx значения неправильные? Если так, то какие значения в них нужно записать?

Чтобы не приводить значения всех регистров настройки работы МК прилагаю файл архива с проектом тестирования памяти XRAM для работы на МОП.
TestXRAM.zip
Программа выполняет запись слова по адресу 0xD800, после этого читает слово по тому же адресу. Если прочитанное значение совпадает с записанным, включает зеленые светодиоды через порт P3, иначе красные. У меня этот тест не проходит.

Прошу Вас помочь разобраться с этой проблемой, так как 4кбайт ОЗУ никогда не бывают лишними.
Попробуйте вот так:
XADRS2 = 0x0E03
XBCON2 = 0x04BF
XADRS3 = 0x0D83
XBCON3 = 0x04BF
noatime
Сообщения: 13
Зарегистрирован: 16 янв 2015, 12:04

Re: 1887ВЕ3Т

Сообщение noatime »

К сведению, в этом году планируется выход микроконтроллера в развитие 1887ВЕ3Т
А можно узнать поподробнее, просто модификация 1887ВЕ3Т или уже другая модель? Переферия 5 вольт или 3.3?
bentech
Сообщения: 9
Зарегистрирован: 27 янв 2015, 13:31

Re: 1887ВЕ3Т

Сообщение bentech »

Добрый день.

Подскажите, у контроллера XC167CI есть возможность так называемых Fast Interrupts, за использование которых отвечают регистры:

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

FINT0CSP             EQU    0xEC00       ;Fast Interrupt Control Register 0
FINT0ADDR            EQU    0xEC02       ;Fast Interrupt  Address Register 0
FINT1CSP             EQU    0xEC04       ;Fast Interrupt Control Register 1
FINT1ADDR            EQU    0xEC06       ;Fast Interrupt  Address Register 1
BNKSEL0              EQU    0xEC20       ;Register Bank Selection Register 0
BNKSEL1              EQU    0xEC22       ;Register Bank Selection Register 1
BNKSEL2              EQU    0xEC24       ;Register Bank Selection Register 2
BNKSEL3              EQU    0xEC26       ;Register Bank Selection Register 3
Есть ли такой функционал у 1887ве3т? Если есть, то какие адреса у этих регистров в вашем МК?

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

Борьба с ошибкой CAPCOM в режиме 3

Сообщение Denis »

Как известно в процессоре есть ошибка не дающая формировать ШИМ на CAPCOM. Предложенный разработчиком подход с использованием двухрегистрового сравнения не подходит, т.к. при изменении скважности "на лету" ваши 20% ШИМ могут легко превратиться в 80%, например.

На отладочной плате я обошел эту ошибку следующим образом:

1.Выбираем таймер и ССx для работы в режиме 3. ССx определяет значение скважности, хитростей нет.
2.В ТxREL записываем 0
3.Выбираем другой капком CCy, настраиваем его в режиме 0
4 CCy=0
5.Заводим в программе константную переменную со значением равным тому, что мы хотели бы поместить в TxREL если бы не было ошибки в контроллере :)
6.Настраивем ПЕК-пересылку от ССy: источник - переменная, назначение Tx, количество пересылок -255 (постоянно).
7.Запускаем таймер

Итог:
Все работает как будто ошибки нет, из дополнительных ресурсов задействуется 1 капком и один ПЕК для каждого таймера.

Учтите: задавать ровно 100% скважности нельзя, надо на один "атом" меньше.
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Непонятки с CAPCOM6

Сообщение Denis »

Хочу сформировать прерывание CCU6 по совпадению в канале 0. Прервывние не формируется. Устаналиваю запрос в регистре CCU6_IC программно вообще не включая капком6. Программа вылетает (куда вылетает так сразу сказать проблематично, т.к. jtag у меня нет). Вопрос: там все ок? CCU6_IC расположен по адресу 1F40?
Sanek
Сообщения: 57
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

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

Re: 1887ВЕ3Т

Сообщение Denis »

Саньку спасибо за ответ.
Вопрос к разработчикам по поводу работы блока выходной модуляции.
Задача - менять ШИМ по синусоидальному закону. На выходе ССOUT63 все получилось. Мне необходимо перенаправить на выход СС60. Пытаюсь использовать блок выходной модуляции для перенаправления сигнала таймера Т3 на СС60 - ничего не выходит: либо сигнала нет, либо прерывания сыплются чаще. Исходник примера прилагаю, проблемное место в самом конце текста. Внесите ясность пожалуйста.

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

//----------------------------------------------------------------------------------------------------
#include <K1887VE3T.H>
#include <intrins.h>
//----------------------------------------------------------------------------------------------------
// !!!  ЭТО ВСЕ ПРЕАМБУЛА, СУТЬ ВОПРОСА В КОНЦЕ ФУНКЦИИ void sinus_example(void) !!!
//----------------------------------------------------------------------------------------------------
//Частота ядра, Гц
#define FCPU 20000000
//---------------------
#define iNo_T12 0x4D
#define iNo_T13 0x4E
#define iNo_CCU6E 0x4F
#define iNo_CCU6 0x50
//#define DENIS
//----------------------------------------------------------------------------------------------------
sfr   __CCU6_IC		= 0xF120;
//----------------------------------------------------------------------------------------------------
//Приоритеты прерываний
enum INTERRUPT_LEVELS
 {//-------------------------------------->
  //        GLVL:   0    /**/   1     /**/   2     /**/   3     /**/   4    /**/    5     /**/   6     /**/   7   
  //    
  /* ^ ILVL:15 */NET0  ,/**/iLvl_T4,/**/iLvl_CAP6,/**/iLvl_T12,/**/,NET4,/**/  NET5  ,/**/  NET6  ,/**/  NET7  ,
  /* | ILVL:14*/,NET8  ,/**/ NET9  ,/**/ NET10 ,/**/ NET11,/**/,  NET12 ,/**/  NET13 ,/**/  NET14 ,/**/  NET15 ,
  /* | ILVL:13*/ NET16 ,/**/ NET17 ,/**/ NET18 ,/**/ NET19 ,/**/, NET20 ,/**/  NET21 ,/**/  NET22 ,/**/  NET23 ,
  /* | ILVL:12*/ NET24 ,/**/ NET25 ,/**/ NET26 ,/**/ NET27 ,/**/, NET28 ,/**/  NET29 ,/**/  NET30 ,/**/  NET31 ,
  /* | ILVL:11*/ NET32 ,/**/ NET33,/**/  NET34 ,/**/ NET35 ,/**/, NET36 ,/**/  NET37 ,/**/  NET38 ,/**/  NET39 ,
  /* | ILVL:10*/ NET40 ,/**/ NET41 ,/**/ NET42 ,/**/ NET43 ,/**/, NET44 ,/**/  NET45 ,/**/  NET46 ,/**/  NET47 , 
  /* | ILVL:9 */ NET48 ,/**/ NET49 ,/**/ NET50 ,/**/ NET51 ,/**/, NET52 ,/**/  NET53 ,/**/  NET54 ,/**/  NET55 ,
  /* | ILVL:8 */ NET56 ,/**/ NET57 ,/**/ NET58 ,/**/ NET59 ,/**/, NET60 ,/**/  NET61 ,/**/  NET62 ,/**/  NET63 ,
  /* | ILVL:7 */ NET64 ,/**/ NET65 ,/**/ NET66 ,/**/ NET67 ,/**/, NET68 ,/**/  NET69 ,/**/  NET70 ,/**/  NET71 ,
  /* | ILVL:6 */ NET72 ,/**/ NET73 ,/**/ NET74 ,/**/ NET75 ,/**/, NET76 ,/**/  NET77 ,/**/  NET78 ,/**/  NET79 ,
  /* | ILVL:5 */ NET80 ,/**/ NET81 ,/**/ NET82 ,/**/ NET83 ,/**/, NET84 ,/**/  NET85 ,/**/  NET86 ,/**/  NET87 ,
  /* | ILVL:4 */ NET88 ,/**/ NET89 ,/**/ NET90 ,/**/ NET91 ,/**/, NET92 ,/**/  NET93 ,/**/  NET94 ,/**/  NET95 ,
  /* | ILVL:3 */ NET96 ,/**/ NET97 ,/**/ NET98 ,/**/ NET99 ,/**/,NET100 ,/**/ NET101 ,/**/ NET102 ,/**/ NET103 ,
  /* | ILVL:2 */NET104 ,/**/NET105 ,/**/NET106 ,/**/NET107 ,/**/,NET108 ,/**/ NET109 ,/**/ NET110 ,/**/ NET111 , 
  /* | ILVL:1 */NET112 ,/**/NET113 ,/**/NET114 ,/**/NET115 ,/**/,NET116 ,/**/ NET117 ,/**/ NET118 ,/**/ NET119 
  };
#define ILVL(LVL) ((((LVL)^0x78)>>3)&0xF)
#define GLVL(LVL) ((LVL)&0x7)
#define PLEV(LVL) (((LVL)&0x30)<<8)
#define INIT_INT_LEVEL(LVL,ENA,REQ) (LVL&0x3)|((LVL&0x4)<<6)|(ILVL(LVL)<<2)|((ENA)<<6)|((REQ)<<7)
//----------------------------------------------------------------------------------------------------
#ifndef DENIS
  unsigned int volatile sdata *const SRCP_[8]=
    {&SRCP0,&SRCP1,&SRCP2,&SRCP3,&SRCP4,&SRCP5,&SRCP6,&SRCP7};
  unsigned int volatile sdata *const DSTP_[8]=
    {&DSTP0,&DSTP1,&DSTP2,&DSTP3,&DSTP4,&DSTP5,&DSTP6,&DSTP7};
  unsigned int volatile sdata *const PECSN_[8]=
    {0xFED0,0xFED2,0xFED4,0xFED6,0xFED8,0xFEDA,0xFEDC,0xFEDE};
#else
  extern unsigned int volatile sdata *const SRCP_[8];
  extern unsigned int volatile sdata *const DSTP_[8];
  extern unsigned int volatile sdata *const PECSN_[8];
#endif
#define PECC(lvl) (*(((unsigned int volatile sdata *)(&PECC0))+((GLVL(lvl)&0x3)|((ILVL(lvl)&0x1)<<2))))
#define SRCP(lvl) *SRCP_[((GLVL(lvl)&0x3)|((ILVL(lvl)&0x1)<<2))]
#define DSTP(lvl) *DSTP_[((GLVL(lvl)&0x3)|((ILVL(lvl)&0x1)<<2))]
//----------------------------------------------------------------------------------------------------
typedef short int16;
typedef unsigned short uint16;
//----------------------------------------------------------------------------------------------------
//Синусоида для выдачи на ШИМ
#define SIN_PNT_COUNT 10
#define PWM_P_MAX (uint16)((FCPU)/(2000*SIN_PNT_COUNT))
#define PWM_P_HALF (PWM_P_MAX>>1)
static int16 idata SinData[SIN_PNT_COUNT]=
  {0x00C0,0x01E2,0x30B,0x03C9,0x03D4,0x0327,0x0205,0x00DC,0x001E,0x0013}; 
//----------------------------------------------------------------------------------------------------
#define PECREINI() do{\
SRCP(iLvl_CAP6)=_sof_(SinData);\
PECC(iLvl_CAP6)=PLEV(iLvl_CAP6)|SIN_PNT_COUNT|(2<<9);\
}while(0)
//---------------------------------------------------------------------------------------------------
extern unsigned long _tst2;
//Прерывание для переинициализации ПЕК
void hz20030isr(void) interrupt iNo_CCU6
{
#ifdef DENIS
  _tst2++;
#endif
PECREINI();
}
//----------------------------------------------------------------------------------------------------
void sinus_example(void)
{
static idata kicker=(1<<14)|(1<<6);
/* Disable XBUS for CAN module */ /* 2 Kbytes of XSFR area -> CAP6 */
XBCON1=0; XADRS4=0xE83;  XBCON4=0x14BF;
//Настройка пек для запроса теневой передачи Т3 по period match T2
DSTP(iLvl_T12)=_sof_(&CCU6_TCTR4);
SRCP(iLvl_T12)=_sof_(&kicker);
PECC(iLvl_T12)=PLEV(iLvl_T12)|0xFF;
CCU6_T12IC=INIT_INT_LEVEL(iLvl_T12,1,0);
//На всякий случай делаем так, чтобы запрос теневой передачи 
// и засылка нового значения синуса не совпадали с моментом переполнения таймера T3
CCU6_T13=10; 
//Настройка пек для передачи из масива в регистр сравнения T3
DSTP(iLvl_CAP6)=_sof_(&CCU6_CC63SR);
PECREINI();
//Задаем период
CCU6_T12PR=PWM_P_MAX-1; 
CCU6_T13PR=PWM_P_MAX-1; 
CCU6_TCTR4=(1<<6)|(1<<14); //Эта строка для работы симулятора
//Разрешаем прерывания в CAPCOM6
CCU6_IEN=(1<<7)| //period match T2
         (1<<0); //compare ENCC60R
//Разрешаем выходы порта
ALTSEL0P1L|=((1<<6)|(1<<0));
_bfld_(DP1L,(1<<6)|(1<<0),(1<<6)|(1<<0));
__CCU6_IC=INIT_INT_LEVEL(iLvl_CAP6,1,0);
//-----------------------------------------------------
#if 0
  //Вариант для выдачи ШИМ на выход CCOUT63, работает как и ожидалось
  CCU6_MODCTR=(1<<15);
#else
//Вариант для выдачи ШИМ на выход CC60, работает неправильно
  CCU6_MODCTR=(1<<7)| //Multi channel mode
              (1<<8);  //T3->CC60
  CCU6_MCMOUTS=0x81;
   
  //Если этой строки не написать - на выходе ничего нет, 
  //если написать - прерывания идут чаще чем нужно
  CCU6_T12MSEL=0x1; 
#endif
//-----------------------------------------------------
//GO !
CCU6_TCTR4=
           (1<<1)| //T2R
           (1<<9); //T3R
}
//----------------------------------------------------------------------------------------------------
Sanek
Сообщения: 57
Зарегистрирован: 29 окт 2013, 23:38
Предприятие: НИИЭТ
Откуда: Воронеж

Re: 1887ВЕ3Т

Сообщение Sanek »

Вопрос к разработчикам по поводу работы блока выходной модуляции.
1)Выложите на форуме Ваш проект ПОЛНОСТЬЮ.
2)Нашел свой старый файл на asm - может поможет.
Вложения
cc6_output_modulation.txt
(3.71 КБ) 159 скачиваний
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

1)Выложите на форуме Ваш проект ПОЛНОСТЬЮ.
Хорошо, я сделаю отдельный проект. Вообще я полагал, что достаточно вставить в main:

IEN=1;
sinus_example();
while(1);
Denis
Сообщения: 32
Зарегистрирован: 16 май 2013, 22:01

Re: 1887ВЕ3Т

Сообщение Denis »

1)Выложите на форуме Ваш проект ПОЛНОСТЬЮ.
Выкладываю. Рассчитан на кварц 20 МГц.
Вложения
caproj.zip
(8.88 КБ) 181 скачивание
Ответить

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