Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Зацикливание программы при формировании СТАРТ I2C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Yaumen
Все привет.
Сразу хочу предупредить, с PIC процессорами опыта маловато, возможно именно из-за этого возникла проблема.
Суть ее в следующем, написал код мастера шины I2C для процессора PIC16F1823, вот фрагмент, генерирующий СТАРТ:

Код
       ;//////////////////////////////////////////////////////////////
       ;// ПЕРЕДАЕМ ИМПУЛЬС СТАРТ
        BANKSEL SSP1CON2
        clrf    SSP1CON2
        bsf     SSP1CON2,SEN               ;ПЕРЕДАЕМ ИМПУЛЬС СТАРТА
       ;//////////////////////////////////////////////////////////////
       ;// ЖДЕМ ПЕРЕДАЧИ ИМПУЛЬСА СТАРТ
        BANKSEL PIR1
read_i2c_wait_start:
        BANKSEL PIR1
        btfss   PIR1,SSP1IF
        goto    read_i2c_wait_start
        bcf     PIR1,SSP1IF


Цикл read_i2c_wait_start становится бесконечным, т.е. почему-то флаг SSP1IF не устанавливается.
Не могу понять почему!

На всякий случай привожу фрагмент инициализации I2C
Код
        BANKSEL SSP1STAT
        clrf    SSP1STAT               ; HIGH SPEED MODE (400 kHz), SMBus disabled
        BANKSEL SSP1CON1
        movlw   (BIT(SSPEN) | BIT(SSPM3)); I2C MASTER ENABLED (CLOCK = FOSC / (4 * (SSP1ADD+1)))
        movwf   SSP1CON1
        BANKSEL SSP1CON2
        clrf    SSP1CON2
        BANKSEL SSP1CON3
        clrf    SSP1CON3
        BANKSEL SSP1MSK
        clrf    SSP1MSK
        BANKSEL SSP1ADD
        movlw   ClockValue             ;СКОРОСТЬ РАБОТЫ I2C
        movwf   SSP1ADD
ar__systems

читайте внимательнее мануал, SSP1IF и не должен устанавливаться.
Yaumen
Цитата(ar__systems @ Aug 30 2013, 05:36) *
читайте внимательнее мануал, SSP1IF и не должен устанавливаться.


Я понимаю, что Вы скорее всего говорите об заметке 1 раздела "25.6 I2C MASTER MODE":
Цитата
When in Master mode, Start/Stop detection is masked and an interrupt is generated when the SEN/PEN bit is cleared and the generation is complete.


Но я руководствовался алгоритмом раздела "25.6.6.4 Typical Transmit Sequence":
Цитата
1. The user generates a Start condition by setting the SEN bit of the SSP1CON2 register.
2. SSP1IF is set by hardware on completion of the Start.
3. SSP1IF is cleared by software.
4. The MSSP1 module will wait the required start time before any other operation takes place.
...


Ну и чему верить? Где правда?
ar__systems
Цитата(Yaumen @ Aug 29 2013, 23:52) *
Я понимаю, что Вы скорее всего говорите об заметке 1 раздела "25.6 I2C MASTER MODE":


Но я руководствовался алгоритмом раздела "25.6.6.4 Typical Transmit Sequence":


Ну и чему верить? Где правда?

Хм, да, забавно, а саму шину смотрели, старт там генерируется?
Yaumen
Цитата(ar__systems @ Aug 30 2013, 14:29) *
Хм, да, забавно, а саму шину смотрели, старт там генерируется?


Мда, нашел в чем была проблема, но никак на это не мог подумать.
Оказалось, что проблема была во внутренних подтягивающих резисторах, даже не смотря на то, что внешние резисторы имеются, внутренние отключать нельзя. Как только вернул в установки порта по умолчанию, все заработало как часы!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.