Bill 0 19 мая, 2010 Опубликовано 19 мая, 2010 (изменено) · Жалоба Проблема состоит в конфигурации портов В/В. Имею контроллер STM8S103K. Для начала решил попробовать использовать порт как обычный счетчик и посмотреть на нем сигналы. Для этого выбрал PORTB. Сконфигуриловал его как порт вывода. В бесконечном цикле наращиваю счетчик на 1 1$: inc PB_ODR jra 1$ Смотрю сигналы на выводах порта. А сигналов там вовсе и нет. На паре выводов низкий уровень (true open drain), на остальных - высокий. Попробовал использовать другой порт - PORTC. Абсолютно все то же самое. Взял третий - PORTD. Вроде и работает, но не совсем. На разрядах 0, 7 высокий уровень, на остальных как и положено - меандр. Попробовал чуть усложнить код 1$: inc PB_ODR mov PD_ODR, PB_ODR jra 1$ Абсолютно ничего не изменилось. На разрядах порта B постоянные уровни, на разрядах 1-6 порта D - меандр. Вот и ломаю голову - что я сделал не так? Смотрел фирменные библиотеки, каких-то особых хитростей по конфигурации портов не увидел. Можно предположить, что я при пайке спалил выходы портов. Но это маловероятно. На всякий случай решил собрать еще одну платку с контроллером и посмотреть что будет. PS: А контроллер мне нравится все больше и больше. Вот только бы заставить его работать нормально. :rolleyes: Изменено 19 мая, 2010 пользователем _Bill Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба А что если новое значение, записываемое в порт, не успевает передёрнуть уровни, и чтение из порта возвращает старое значение (или, хуже, комбинацию старого и нового)? IMHO, нужно, чтобы счётчик крутился во внутренней памяти, а наружу выводить копию счётчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба IMHO, нужно, чтобы счётчик крутился во внутренней памяти, а наружу выводить копию счётчика. И так тоже делал, разницы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Проблема состоит в конфигурации портов В/В. Так выложите, как Вы конфигурируете, сравню с библиотечными. Светодиод то моргает. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Кстати каая у вас там ожидаемая частота должна быть на выходе?, потому как там есть еще регистры CR1 и CR2, там максимальная частота ногодрыганья задается, да и выводы в порту имеют разную допустимую частоту ногодрыганья. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Так выложите, как Вы конфигурируете, сравню с библиотечными. Светодиод то моргает. :rolleyes: Нет светодиод не мигает. Я пока все осциллографом смотрю. А код... вот он ; ; ** InitPorts -- функция инициализации портов В/В ; InitPorts: ld a, #0FFh ; Initiate ports ld PB_DDR, a ; ld PB_CR1, a ; ld PD_DDR, a ; ld PD_CR1, a ; ld PD_CR2, a ; ; ld a, #LED_MASK ; Установить порт управления LED драйвером на вывод ; ld LED_DDR, a ; ; ld LED_CR1, a ; включить push-pull режим ; clr LED_PORT ; Сбросить порт ret ; ; ***** main - головная функция ***** ; _main: ldw x, #RAM_END ; Инициализировать стек ldw sp, x ; bset SWEN ; Switch clock to HSE mov CLK_SWR, #0xB4 ; callr InitPorts ; Инициализировать порты 1$: ;;; Бесконечный цикл ; btjf TIM_05, 2$ ; Проверить флаг события и переход, если не установлен ; bres TIM_05 ; Сбросить флаг ; callr Bin2BCD ; Преобразовать новое значение счетчикак для вывода ;2$: ; callr LEDout ; Вывод значения счетчика на индикатор ; inc PB_ODR ; Use ports a a binary counter inc PD_ODR ; bcpl PB_ODR, #1 bcpl PD_ODR, #1 bcpl PD_ODR, #6 bres PD_ODR, #0 jra 1$;;; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Нет светодиод не мигает. У меня диод мигает при использовании функции из библиотеки, содержащей GPIOx->ODR ^=(u8) mask; А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1. После обеда гляну с отладчиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба У меня диод мигает при использовании функции из библиотеки, содержащей GPIOx->ODR ^=(u8) mask; А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1. После обеда гляну с отладчиком. Это все в "железе" работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 20 мая, 2010 Опубликовано 20 мая, 2010 (изменено) · Жалоба Взял STM8S - Discovery, подаренный на компэловском семинаре, написал простецкую программу, как раз по вашему случаю. По - поводу написания и всего остального прошу не пинать, в связи с отсутствием времени получилось вот так и все работает /* MAIN.C file * * Copyright © 2002-2005 STMicroelectronics */ #include "STM8S105C6.h" void GPIO_Conf(void) { PD_DDR = 0xFF; // all PD pins as output PD_CR1 = 0xFF; // all PD pins output push pull PD_CR2 = 0; // all PD pins speed 2MHz PD_ODR = 0; // all set to 0 } void main() { unsigned long int i; GPIO_Conf(); while (1) { for(i = 0; i < 10000; i++); PD_ODR = PD_ODR ^ 0xFF; } } А почему вы тут сразу 2 порта настраиваете, порт B и D: InitPorts: ld a, #0FFh ; Initiate ports ld PB_DDR, a ; ld PB_CR1, a ; ld PD_DDR, a ; ld PD_CR1, a ; ld PD_CR2, a ; Изменено 20 мая, 2010 пользователем topkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Ну, так оба порта хотел попробовать. Один не получился, сконфигурировал второй. Правда, контроллер у меня другой - STM8S103K. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 20 мая, 2010 Опубликовано 20 мая, 2010 (изменено) · Жалоба При беглом просмотре вашего кода ошибок не видно, может быть Stanislav_S прав про частоту? Попробуйте сделать совсем просто, к примеру как в моем коде или скомпилируйте и прошейте его, поменяв только заголовочник и порт. Плюс ватч дог у вас отключен? Может дело в нем. По умолчанию он должен быть отключен, но, если я не ошибаюсь, конфигурация периферии и ватч дога в частности, задается в options bytes и далее работа контроллера при включении питания будет зависеть от настроект в этих байтах. Изменено 20 мая, 2010 пользователем topkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба При беглом просмотре вашего кода ошибок не видно, может быть Stanislav_S прав про частоту? Попробуйте сделать совсем просто, к примеру как в моем коде или скомпилируйте и прошейте его, поменяв только заголовочник и порт. Плюс ватч дог у вас отключен? Может дело в нем. По умолчанию он должен быть отключен, но, если я не ошибаюсь, конфигурация периферии и ватч дога в частности, задается в options bytes и далее работа контроллера при включении питания будет зависеть от настроект в этих байтах. Я проверял программу с использованием фабричных установок (частота внутреннего генератора / 8 = 2МГц). Разницы абсолютно никакой. И потом, у порта D не работает самый старший разряд, а все остальные, за исключением самого младшего, работают. Пробовал управлять скоростью нарастания на выходе порта при помощи регистра CR2, разница в длительности фронтов заметна, но работоспособности никак не сказывается. Что касается Watchdog таймера, то он у меня отключен. Даже если бы он был включен, то при правильной работе сигналы на выходах портов все равно были бы видны, разница между периодом Watchdog таймера и цикла программы составляет несколько порядков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 20 мая, 2010 Опубликовано 20 мая, 2010 (изменено) · Жалоба Уже лучше, ну если эти пины внешне не притянуты к земле или питанию, тогда мистика или что то не так с контроллером Вообще, на этот раз, я отошел от своих принципов и использую предлагаемые библиотеки ST, в общем, солидарен с "Dog Pawlowa". Изменено 20 мая, 2010 пользователем topkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Уже лучше, ну если эти пины внешне не притянуты к земле или питанию, тогда мистика или что то не так с контроллером Вообще, на этот раз, я отошел от своих принципов и использую предлагаемые библиотеки ST, в общем, солидарен с "Dog Pawlowa". Только что попробовал другой контроллер, результат тот же самый. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 21 мая, 2010 Опубликовано 21 мая, 2010 · Жалоба Очень странно, где то трабл, чудес не бывает. Можете выложить полный код еще раз? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться