Перейти к содержанию
    

PCW и калибровка встроенного генератора

Вопрос может и дурацкий, но перечитал всё, что в хэлпе было и не нашел, как в 12Fxxx, 16Fxxx калибровочное значение в OSCTUNE загонять. В асме то понятно, но не верится, что типовую процедуру в компилятор не вставили. В мануале только PIC14000 и 18-я серия, но там совсем всё по-другому. Неужели только через #asm_#endasm втыкать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я не понял вопроса, но что мешает просто туда записать значение?

типа

OSCTUNE = 0x35;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В OSCTUNE присваиванием, в OSCCAL типа такого, наверное:

 

const unsigned char CALIB @ 0x03FF;

void main(void)
{
  OSCCAL = CALIB;
  ...
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может так покатит?

#define OSCCAL_ADDR 0x3ff
OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)();

И очень сомневаюсь, что нечто подобное отсутствует в хидерах.

 

А в PCW все SFR переиначены на свой лад?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может так покатит?

#define OSCCAL_ADDR 0x3ff
OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)();

И очень сомневаюсь, что нечто подобное отсутствует в хидерах.

 

А в PCW все SFR переиначены на свой лад?

 

В хидере на тот же 12Ф629 есть только закомментированная строчка:

//////// Oscilator Calibration Address: 90

Там идеология не записи в SFR каких-то констант как в асме, а готовые команды

типа:

setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);  // Configure CCP1 in COMPARE mode

 

Хотя за неделю знакомства компилятор очень понравился. Сообразительный.

Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В хидере на тот же 12Ф629 есть только закомментированная строчка:

//////// Oscilator Calibration Address: 90

Занятно. Вы хотите сказать, что объявления типа

static bank1 unsigned char OSCCAL @ 0x90;

в хидерах отсутствуют?

Там идеология не записи в SFR каких-то констант как в асме, а готовые команды

типа:

setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);  // Configure CCP1 in COMPARE mode

Надеюсь, что такие обертки - не единственная приятность PCW.

Хотя за неделю знакомства компилятор очень понравился. Сообразительный.

Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.

:) Если бы он так не делал, то дорога ему была бы только "ф топку".

А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов?

А во что он компилит x/16? А x/128?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Занятно. Вы хотите сказать, что объявления типа

static bank1 unsigned char OSCCAL @ 0x90;

в хидерах отсутствуют?

В том-то и дело, там этого нет. Уже б разобрался..

 

Надеюсь, что такие обертки - не единственная приятность PCW.

А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов?

А во что он компилит x/16? А x/128?

Вот из того, что вчера писал:

....................                 PauseTimer=PropTone/16;
022E:  RRF    39,W
022F:  MOVWF  23
0230:  RRF    38,W
0231:  MOVWF  22
0232:  RRF    23,F
0233:  RRF    22,F
0234:  RRF    23,F
0235:  RRF    22,F
0236:  RRF    23,F
0237:  RRF    22,F
0238:  MOVF   22,W
0239:  MOVWF  3D

Багов при исполнении не обнаружил.

Для работы с обдельным битом его обозвать надо:

#bit CARRY=STATUS.0

Зато флаги хранит в битах:

int1 Done, Progress, ChargeMode;

Документация только кривоватая, а так прикрутился к МПлабу очень даже..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот из того, что вчера писал:

....................                 PauseTimer=PropTone/16;
022E:  RRF    39,W
022F:  MOVWF  23
0230:  RRF    38,W
0231:  MOVWF  22
0232:  RRF    23,F
0233:  RRF    22,F
0234:  RRF    23,F
0235:  RRF    22,F
0236:  RRF    23,F
0237:  RRF    22,F
0238:  MOVF   22,W
0239:  MOVWF  3D

Багов при исполнении не обнаружил.

По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию?

Похоже, сезон сбора шишек у Вас еще впереди:)

 

ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию?

Похоже, сезон сбора шишек у Вас еще впереди:)

ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать.

 

Да, размерность правильная угадана. Только "перегрузки" в данном кусочке не будет - входное значение функции не бывает больше 1023..

 

С вопросом поспешил: разглядывая листинг с удивлением заметил, что компилятор сам всё уже вставил. Так как он без напоминания это делает, в мануале об этом ничего и не упомянули. Вопрос снят, тема закрыта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...