Миландр
https://forum.milandr.ru/

1986ВЕ92У (MDR32F9Q2I) - Микроконтроллер из семейства 1986ВЕ9х
https://forum.milandr.ru/viewtopic.php?f=33&t=299
Страница 15 из 17

Автор:  Sergey3141592 [ 2019-окт-03 13:16 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Я такой код использую для запуска RTC.
Выводы PE6, PE7 не инициализирую как аналоговые, поскольку после включения питания и так уже.
typedef volatile unsigned int 		__io_reg;

typedef struct {
	__io_reg CLOCK_STATUS;
	__io_reg PLL_CONTROL;
	__io_reg HS_CONTROL;
	__io_reg CPU_CLOCK;
	__io_reg USB_CLOCK;
	__io_reg ADC_MCO_CLOCK;
	__io_reg RTC_CLOCK;
	__io_reg PER_CLOCK;
	__io_reg CAN_CLOCK;
	__io_reg TIM_CLOCK;
	__io_reg UART_CLOCK;
	__io_reg SSP_CLOCK;
} _rst_clk;


typedef struct {
	__io_reg REG_00;
	__io_reg REG_01;
	__io_reg REG_02;
	__io_reg REG_03;
	__io_reg REG_04;
	__io_reg REG_05;
	__io_reg REG_06;
	__io_reg REG_07;
	__io_reg REG_08;
	__io_reg REG_09;
	__io_reg REG_0A;
	__io_reg REG_0B;
	__io_reg REG_0C;
	__io_reg REG_0D;
	__io_reg REG_0E;
	__io_reg REG_0F;
	__io_reg RTC_CNT;
	__io_reg RTC_DIV;
	__io_reg RTC_PRL;
	__io_reg RTC_ALRM;
	__io_reg RTC_CS;
} _bkp;

#define BASE_RST_CLK		  (0x40020000)
#define BASE_BKP			  (0x400D8000)

#define BKP 				  ((_bkp    *) BASE_BKP)
#define RST_CLK 			  ((_rst_clk*) BASE_RST_CLK)

#define RTC_PRL					32768 //Same as LSE frequency
#define RTC_CALIBRATING			0

#define CLK_BKP 				27

//Wait while WEC[6] = 1
#define WaitRTCRegReady()       while(BKP->RTC_CS & (1 << 6)) __NOP();


void InitializeRTC()
{
	//1. Enable BKP clock
	RST_CLK->PER_CLOCK |= (1 << (u32)(CLK_BKP & 0x1F));

	//2. Turn RTC OFF
	BKP->REG_0F &= ~(1 << 4);

	//3. Reset bits: RTC_SEL[3..2], HSE_RTC_EN[8], HSI_RTC_EN[9]
	BKP->REG_0F &= ~(0x03 << 2);
	RST_CLK->RTC_CLOCK &= ~(0x03 << 8);

	//4.Set LSE_ON[0] = 1, wait LSE_RDY[13] = 1
	BKP->REG_0F |= (1 << 0);             
	while (!(BKP->REG_0F & (1 << 13))) __NOP();  

	//5. RTC_SEL[3..2] = 1 - select LSE
	BKP->REG_0F |= (0x01 << 2);

	//6. Set CAL[12..5] - mask count of ticks from 2^20
	BKP->REG_0F &= ~(0xFF << 5);
	BKP->REG_0F |= ((u8)CALIBRATING) << 5;

	//7. Set RTC_PRL[19..0]: speed = LSE_SPEED / prl = 1Hz
	WaitRTCRegReady();
	BKP->RTC_PRL = RTC_PRL;

	//8. Set SECF[1] = 1
	WaitRTCRegReady();
	BKP->RTC_CS |= (1 << 1);
	WaitRTCRegReady();


	//9. Turn RTC ON
	BKP->REG_0F |= (1 << 4);
}

Автор:  Vasiliy [ 2019-окт-03 15:45 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Sergey3141592 писал(а):
А у вас установлена на плате батарейка, которая поддерживает питание BKP домена?
Нет, батарейками не пользуемся. Программатор тоже отключал, чтобы через него батарейный домен не запитывался.

Но я RTC не включал. На сколько я понял, проблема проявляется раньше - не раскачивается сам генератор LSE, не выставляется LSE_RDY бит. В своем проекте я включаю LSE и перевожу на него тактирование ядра.

Автор:  Sergey3141592 [ 2019-окт-03 16:06 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

ElectroAlex писал(а):
Добрый день.
Пробую запустить RTC с внешним кварцевый и не получается инициализировать запуск генератора от внешнего кварца. Таймер с внутренним LSI генератором работает, а при попытке включения LSE не запускается. Дефект странный: при первом старте после включения питания генератор LSE не включается (бит LSE_RDY всегда низкий), а если сделать программный или аппаратный сброс то генератор включается. Может кто сталкивался с такой проблемой?
Я полагал речь идет про запуск RTC с использованием LSE генератора, поэтому спросил про батарейку - может ли ее отсутствие влиять на значения, которые записываются в BKP регистры при старте контроллера.

Автор:  ElectroAlex [ 2019-окт-09 13:35 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Решил проблему радикальные способом, т.к. Данный экземпляр микроконтроллера не хотел запускать генератор никак. Заменил микросхему и с теме кодом генератор запустился сразу во всех условиях. Мистика прям таки...

Автор:  Millyvolt [ 2020-июн-05 12:19 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Здравствуйте!
UART у данного контроллера толерантен к 5В?

Автор:  Professor Chaos [ 2020-июн-05 15:59 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Millyvolt писал(а): *
Здравствуйте!
UART у данного контроллера толерантен к 5В?
Вопрос задан некорректно. Толерантным или нет может быть вывод микросхемы, а не функциональный блок или периферийное устройство. Так что определитесь, какие выводы вы хотите использовать, а затем читайте раздел 34 спецификации. Ищите в таблице параметр "Входное напряжение высокого уровня" и смотрите, какое оно для нужных вам выводов. Если верхнее значение диапазона более 5 В (например, от 2,0 до 5,25 В) - значит эти выводы толерантны к 5 В.

Автор:  Millyvolt [ 2020-июн-08 17:48 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Professor Chaos писал(а): *
Вопрос задан некорректно. Толерантным или нет может быть вывод микросхемы, а не функциональный блок или периферийное устройство. Так что определитесь, какие выводы вы хотите использовать, а затем читайте раздел 34 спецификации. Ищите в таблице параметр "Входное напряжение высокого уровня" и смотрите, какое оно для нужных вам выводов. Если верхнее значение диапазона более 5 В (например, от 2,0 до 5,25 В) - значит эти выводы толерантны к 5 В.
ок, но меня то интересует именно работа UART'a, если выводы на которые можно вывести UART, извиняюсь за тавтологию, толерантны к 5В, это не гарантирует работу UART'a на данных выводах с уровнями 5В.

Автор:  Professor Chaos [ 2020-июн-08 19:29 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Millyvolt писал(а): *
это не гарантирует работу UART'a на данных выводах с уровнями 5В.
Это гарантирует, что на ВХОД RX UART можно подавать напряжение до 5,25 В с выхода какой-то другой микросхемы в вашей схеме. При этом с микроконтроллером ничего не случится, он будет работать в штатном режиме. Все его блоки. И UART в том числе.
А ВЫХОД TX UART как выдавал, так и будет выдавать логическую 1 с уровнем текущего напряжения питания МК. Выше питания не прыгнешь.

Автор:  редактор [ 2020-июн-09 08:58 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Цитата:
ВЫХОД TX UART как выдавал, так и будет выдавать логическую 1 с уровнем текущего напряжения питания МК. Выше питания не прыгнешь.
Не обязательно с уровнем питания МК. Можно ведь открытый сток сделать и снаружи притянуть резистором к +5В.

Автор:  Millyvolt [ 2020-июн-09 11:24 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

понятно, спасибо.

Автор:  Professor Chaos [ 2020-июн-09 18:21 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

редактор писал(а): *
Можно ведь открытый сток сделать и снаружи притянуть резистором к +5В.
Да, действительно, так можно. Забыл про режим работы выходного драйвера с открытым стоком.

Автор:  avk_nn [ 2020-июл-13 08:58 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Добрый день.
Могу ли я динамически управлять JTAG-ом (выключить . включить) для временного использования порта JTAG?

Автор:  редактор [ 2020-июл-13 11:57 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

"Динамически" это как?? на 20 мс включил, на 100 мс выключил, потом опят включил??
Такой вариант вряд ли прокатит.

Автор:  avk_nn [ 2020-июл-13 13:51 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

Мне нужно проверить, подключен ли отладчик (пины 0, 1 подтянуты к питанию при подключения кабеля отладчика). Если нет то выключаю JTAG, забираю порт.
Если да то порт не трогаю и другая логика.

Автор:  Professor Chaos [ 2020-июл-13 18:49 ]
Заголовок сообщения:  Re: 1986ВЕ92У, MDR32F9Q2I

avk_nn писал(а): *
Мне нужно проверить, подключен ли отладчик (пины 0, 1 подтянуты к питанию при подключения кабеля отладчика). Если нет то выключаю JTAG, забираю порт.
Если да то порт не трогаю и другая логика.
Можно.
Под "забираю порт" в этои случае понимается переопределение пинов портов, совмещенных с jtag, и управление ими по своему усмотрению. Ничего выключать не надо. Отладка отвалится сама.

Страница 15 из 17 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/