Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC18F2520 проблемма с SSPCON1
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Kolia
Добрый день.

При записи в регистр SSPCON1 программа вылетает в другое место в чем трабла?

Код на С

SSPCON1 &= 0xF0;

На ассемблере:

movlw 0xF0
andwf 0xFC6

конкретно в отладчите вылетает на movlw 0xF0
Прохожий
Цитата(Kolia @ Sep 24 2009, 23:17) *
Добрый день.

При записи в регистр SSPCON1 программа вылетает в другое место в чем трабла?

Код на С

SSPCON1 &= 0xF0;

На ассемблере:

movlw 0xF0
andwf 0xFC6

конкретно в отладчите вылетает на movlw 0xF0

Мало информации. Лучше приведите листинг из этого места.
К примеру, неясен метод доступа, что в BSR....
А то, может так случится, что идет обращение к несуществующему адресу.
Kolia
вот файлик
Kolia
Может проблемма с портами при инициализации I2C? Как их правильно настроить на вход или выход?
Прохожий
Цитата(Kolia @ Sep 27 2009, 14:53) *
Может проблемма с портами при инициализации I2C? Как их правильно настроить на вход или выход?

Вот, что удалось вычитать из Datasheeta:
CODE

17.3.3 ENABLING SPI I/O
To enable the serial port, SSP Enable bit, SSPEN
(SSPCON1<5>), must be set. To reset or reconfigure
SPI mode, clear the SSPEN bit, reinitialize the
SSPCON registers and then set the SSPEN bit. This
configures the SDI, SDO, SCK and SS pins as serial
port pins. For the pins to behave as the serial port function,
some must have their data direction bits (in the
TRIS register) appropriately programmed as follows:
• SDI is automatically controlled by the SPI module
• SDO must have TRISC<5> bit cleared
• SCK (Master mode) must have TRISC<3> bit
cleared
• SCK (Slave mode) must have TRISC<3> bit set
• SS must have TRISA<5> bit set
Any serial port function that is not desired may be
overridden by programming the corresponding data
direction (TRIS) register to the opposite value.

В переводе на человеческий язык там написано, что для того, чтобы разрешить последовательный порт, надо установить SSPEN (SSPCON1<5>).
Для сброса или реконфигурации режима SPI надо очистить SSPEN, ре инициализировать SSPCON и затем установить бит SSPEN.
Это сконфигурирует выводы SDI, SDO, SCK и SS, как выводы последовательного порта.
Для выводов, выполняющих функции последовательного порта, их направления передачи уместно запрограммировать следующим образом:
• SDI - автоматически управляется модулем SPI
• SDO - должен иметь бит TRISC<5> сброшенным
• SCK (режим мастера) - бит TRISC<3> сброшен
• SCK (режим ведомого) - бит TRISC<3> установлен
• SS должен иметь бит TRISA<5> установленным.
Некоторые функции последовательного порта могут быть переопределены посредством программирования направления передачи
данных (регистры TRIS) в другую сторону, что нежелательно.

От себя добавлю, что в связи с изложенным выше, Вы, по всей вероятности, устраиваете маленький коротыш внутри кристалла.
Поэтому он и вылетает.
Kolia
Убрал из проекта библиотеку i2c и rts-ds1307, убрал все настройки ядра для i2c, остался только USATR. Запускаю - все работает. Добавляю библиотеки i2c и rts-ds1307, мзменяю процедуру инициализации ds1307 на

void ds1307_init(void)
{
char i;
i++;
i++;
i++;
i++;
i++;
i++;
}

добавляю ее в main(), запускаю и при прохождении i++;(2-й) прога вылетает на адрес 7F86.

Вот и думаб то-ли мой комп обкурился, то-ли я(. Вот где может быть трабла. Млгу выложить проект если нужно.
Прохожий
Цитата(Kolia @ Sep 27 2009, 22:52) *
Убрал из проекта библиотеку i2c и rts-ds1307, убрал все настройки ядра для i2c, остался только USATR. Запускаю - все работает. Добавляю библиотеки i2c и rts-ds1307, мзменяю процедуру инициализации ds1307 на

void ds1307_init(void)
{
char i;
i++;
i++;
i++;
i++;
i++;
i++;
}

добавляю ее в main(), запускаю и при прохождении i++;(2-й) прога вылетает на адрес 7F86.

Че-то я нить потерял...
А нафига это все?
Локальная переменная... Многочисленное увеличение ее на 1...
Нннничего не понимаю...
HHIMERA
Цитата(Прохожий @ Sep 27 2009, 22:16) *
Че-то я нить потерял...
А нафига это все?
Локальная переменная... Многочисленное увеличение ее на 1...
Нннничего не понимаю...


Да вылетает он спонтанно... Кружит, пытается определится где лажа, а версию компилятора даже не указал...

OFF: Слышал, получил долгожданные PIC24... Поздравляю... rolleyes.gif
Kolia
Ну так для проверки. Получается что я не правильно подключил библиотеки, или в настройках компилятора что-то не указал. Почему-то компилятор загоняет на адресса 7D76 хотя с 0x0030 до 0x7D76 все свободно.
Прохожий
Цитата(Kolia @ Sep 27 2009, 23:44) *
Ну так для проверки. Получается что я не правильно подключил библиотеки, или в настройках компилятора что-то не указал. Почему-то компилятор загоняет на адресса 7D76 хотя с 0x0030 до 0x7D76 все свободно.

Выходит так...
Только еще и компоновщик...
Честно говоря, я бортовую переферию инициализирую один раз в Startup-e. Ручками. Только то, чем потом буду пользоваться.
С учетом того, что все будет работать по прерываниям...
В связи с этим, готовыми функциями не пользуюсь, а прочтя Datasheet, делаю все самостоятельно.
Поверьте, это не сложно...
Может и Вам стоит попробовать?
HHIMERA
Цитата(Kolia @ Sep 27 2009, 22:44) *
Ну так для проверки. Получается что я не правильно подключил библиотеки, или в настройках компилятора что-то не указал. Почему-то компилятор загоняет на адресса 7D76 хотя с 0x0030 до 0x7D76 все свободно.


И чего ждём??? Когда телепаты из тёплых краёв клином прилетят???
Выкладывай что есть и подробно чем компилишь и т. д. ...
Прохожий
Цитата(HHIMERA @ Sep 27 2009, 23:39) *
OFF: Слышал, получил долгожданные PIC24... Поздравляю... rolleyes.gif

Да.
Поэтому и говорю, что доступны они всем и каждому.
Kolia
Вот настройки компилятора PICC-18
-Zg4 -O -ASMLIST

Линкера PICC-18
-M"$(TARGETBASE).map" -O"$(TARGETBASE).cof" -O"$(TARGETBASE).hex"

Вот проект. Компилятор picc-18 9.50. IDE MPLAB 8.10.00.00. Программатор PICKit2.
Прохожий
Цитата(Kolia @ Sep 28 2009, 00:01) *
Вот настройки компилятора PICC-18
-Zg4 -O -ASMLIST

Я не силен в ключах PICC-18 (пользуюсь MCC18), но что-то мне подсказывает, что включена полная оптимизация.
При отладке делать этого не стоит...
Цитата(Kolia @ Sep 28 2009, 00:01) *
Линкера PICC-18
-M"$(TARGETBASE).map" -O"$(TARGETBASE).cof" -O"$(TARGETBASE).hex"

У линкера ничего интересного.
Kolia
отключил оптимизацию - все тоже самое(
Прохожий
Цитата(Kolia @ Sep 28 2009, 00:24) *
отключил оптимизацию - все тоже самое(

Чего-то не нашел тела функции или определения макроса
i2c_init().
Где это находится?
HHIMERA
Цитата(Прохожий @ Sep 28 2009, 00:01) *
Чего-то не нашел тела функции или определения макроса
i2c_init().
Где это находится?


В rtc2.c ...
testerplus
Цитата(Kolia @ Sep 28 2009, 00:24) *
отключил оптимизацию - все тоже самое(

Я смотрю, ты для отладки пользуешься PicKit2? Но у тебя не установлена галочка в опциях проекта: "Project\Build options\Project\Global:Compile for MPLAB ICD" (это зарезервирует область памяти в ПИКе, куда должен помещаться код дебагера, а так компилятор помещает твой код как раз в ту область)
Kolia
Спасибо! Вылетать перестало). Буду дальше разбиратся с i2c smile3046.gif

А как сделать что бы отладчик останавливался на точке останова, а то у меня он что-то перестал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.