2 месяца спустя

Здравствуйте!
Имею на столе отладочный комплект последней версии. Работаю в Keil_5.
Можно ли посмотреть в отладчике состояние регистров периферийных устройств, например
GPIOA?

Ещё вопрос: загрузила прилагаемый проект Exampl (мигание 4 светодиодов).
На выводе GPIOB_1 (RC_CLOCKOUT) вижу меандр 3 МГц. Кварцевый резонатор на плате 4 МГц.
Регистры конфигурации я не меняла, при включении они равны 0.
Откуда берётся частота на выводе, который я не конфигурировала?
Спасибо

    Elena
    Состояние регистров периферийных устройств можно посмотреть по нажатию «View» –> «Watch Windows» –> «Watch 1» (Руководство пользователя Приложение А, стр.16, пункт “Просмотр состояния переменных”)

    Вывод GPIOB_1 (RC_CLOCKOUT) при TM=1 (режим отладки в Keil) работает как выход внутреннего RC-генератора. При этом частота по умолчанию не настроена. Для настройки необходимо записать биты в регистры ANALOG_O_RC_R и ANALOG_O_RC.
    При TM=0 вывод работает как GPIOB_1.

    5 дней спустя

    Как настроить отладчик, чтобы увидеть регистры ANALOG_CFG?
    Как изменить частоту внутреннего RC?
    В проект ANALOG_CFG добавила переменные analog_o_rc = ReadReg(ANALOG_O_RC) и
    analog_o_rc_r = ReadReg(ANALOG_O_RC_R)
    Записывала максимальные и минимальные значения в регистры ANALOG_O_RC и ANALOG_O_RC_R.
    Переменные analog_o_rc, analog_o_rc_r в окне Watch1 всегда равны 0,
    частота на выводе GPIOB_1 не изменяется.
    Я не могу понять, в чем дело. Помогите пожалуйста разобраться.

    Выяснила, что запись
    WriteReg(ANALOG_O_RC, 0×7F) и
    WriteReg(ANALOG_O_RC_R, 0×00)
    устанавливает минимальную частоту внутреннего RC генератора ( 34.6 кГц ),
    а последующее чтение регистров
    analog_o_rc = ReadReg(ANALOG_O_RC) и
    analog_o_rc_r = ReadReg(ANALOG_O_RC_R)
    меняет ( 333,33 кГц )

      Elena

      Здравствуйте!
      Данные регистры доступны только для записи (см. спецификацию 105-003 - регистры модуля ANALOG_CFG - Доступ “W”, т.е. write). Имеет смысл считывать статусные регистры при отладке, например, value = ReadReg(UART0_ST0); В вашем случае при попытке чтения регистров происходит сброс записанных значений и устанавливаются значения по умолчанию (0) и частота RC также устанавливается по умолчанию. Для настройки необходимо просто записать значения в регистры и контролировать частоту на выходе GPIOB_1 (чтение не производить).

      Здравствуйте!
      Правильно я понимаю, линии GPIOC_0 и GPIOC_1, к которым подключены эти кнопки,
      в тестовом режиме ( SOFT ) заняты JTAG?
      Т.е. использовать их в режиме SOFT нет возможности?
      Спасибо

      • ArtemS ответили на это сообщение.

        Elena Здравствуйте!
        Все верно.
        Их можно использовать при программировании через приложение DCSProg-6.exe (Микросхема -> Прошить ОЗУ). После программирования таким способом вывод “ТМ” микросхемы опускается в лог. “0”, и выводы JTAG (GPIOC_0, GPIOC_1, GPIOC_2, GPIOC_3) и выводы GPIOB_0, GPIOB_1 становятся портами входа/выхода.

        В тестовом проекте Sleep_ex при переключении системной частоты с внешней HTAL на внутренний RC
        в регистр управления CMM_CTRL последовательно записываются константы 0х6, 0х7, ожидание сброса бита SWITCH в регистре статуса CMM_ST и запись в CMM_CTRL константы 0х5. Это не соответствует спецификации (версия 1.5, стр. 43). Как правильно переключать частоту?

          Elena
          Добрый день!
          Данный проект написан под предыдущую ревизию МК.

          Актуальный проект ниже. Обновили его также в разделе “Отладочные комплекты”.

          #include "reg51.h"
          
          sbit gpioa_6 = 0x86;
          
          void main (void)
          {
          	WriteReg(FSM_PRD2, 0x01); //value for FSM_H
          	WriteReg(FSM_PRD1, 0x01); //value for FSM_M
          	WriteReg(FSM_PRD0, 0xFF); //value for FSM_L
          	WriteReg(GPIOA_DIR_SET, 0x40); //GPIOA_6 is output
          	while (1)
          	{
          		WriteReg(CMM_CTRL, 0x01); //clocking from RC
          		while((ReadReg(CMM_ST)&0x2)==0x2); //Waiting for switching to frequency
          		gpioa_6 = 1; //High level
          		WriteReg(FSM_CTRL, 0x01); //Enable switch frequency module
          		gpioa_6 = 0; //Low level
          		WriteReg(CMM_CTRL, 0x00); //clocking from xtal
          		while((ReadReg(CMM_ST)&0x2)==0x2); //Waiting for switching to frequency
          	}
          }
          14 дней спустя

          Здравствуйте!
          В программе DCSProg-6 не работают горячие клавиши, но это не главное.
          Главный вопрос по использованию программатора:

          • пример Example под отладчиком из Keil выполняется без вопросов - все 4 лампочки включаются по очереди.
            Запускаю DCSProg-6, загружаю Example.hex, прошиваю ОЗУ, программный сброс - горит одна лампочка постоянно. Непонятно, почему.
            Помогите пожалуйста разобраться.
            Спасибо!

            В отладчике кнопки Step и Step Over не работают: значение PC не меняется.
            Keil V5.38.0.0

              Что-то у меня не получается. Модифицировала тестовый проект GPIO для кнопок.
              Установила перемычки на ХР18 и ХР19 для установки в “1” GPIOC_0 и GPIOC_1.
              Через приложение DCSProg-6.exe загрузила файл и прошила ОЗУ.
              На выводах GPIOC_0 и GPIOC_1 при нажатии кнопок устанавливаются единицы, а лампочки не горят.
              Программа не запускается? Нет тактовой от ZQ1? Или я уже что-то сожгла?
              ![void main (void)
              {
              WriteReg(GPIOA_DIR_SET, 0xFF); // GPIOA_0…7 are output
              P0 = 0×10; // gpio_4
              WriteReg(GPIOC_DIR_CLR, 0×03); // GPIOC_0,1 are input


              while (1)
              {
              	if ((P3 & 0x1) == 0x1)     //Check if CPIOC_0 in high level, SW3
              	{
              		gpioa_5 ^= 1;          //Then invert GPIOA_5
              		Delay(5000);
              	}
              	if ((P3 & 0x2) == 0x2)     //Check if GPIOC_1 in high level, SW2
              	{
              		gpioa_6 ^= 1;          //Invert GPIOA_6
              		Delay(5000);
              	}
              	gpioa_4 = 0;               //GPIOC_4 
              }

              }

              void Delay(int tick){
              //__asm(“NOOP”);
              volatile int i=0;
              while(i<tick){
              i++;
              }
              }](https://)

                Внешняя тактовая частота для процессора STM и для процессора 5400ТР105 от ZQ1?

                  Может быть, попробовать перейти на тактирование от внутреннего RC?

                    Elena
                    После прошивки ОЗУ светодиоды включаются по очереди?
                    При этом закрыта ли отладка в Keil?
                    Работа в отладчиком и DCSProg6 одновременно невозможна.

                    Elena
                    Здравствуйте!
                    С текущей версией микроконтроллера 5400ТР105-003 кнопка Step не работает.
                    Команда Step Over будет работать только если на входе в функцию стоит PC.

                    Elena
                    Частота процессора STM формируется отдельно (внутренним генератором). Частота для 5400ТР105-003 задается с помощью внешнего генератора по умолчанию. Если прожечь бит 5 в регистре ANALOG_O_PLL, то микросхема будет тактироваться в том числе и от внешнего кварцевого резонатора (ZQ1).

                    Elena
                    Проверили данный проект. Проект работает.
                    Что бы исключить вероятность некорректной работы микросхемы загрузите стандартный проект Example и проверьте, что он корректно отрабатывает.