Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

аппаратный i2c на C18

Ср ноя 21, 2012 15:03:20

код:
Код:
//частота Fosci = 20 МГц

#include <p18f452.h>
#include <i2c.h>

#pragma config WDT=OFF,OSC=HS,LVP = OFF

...

SSPADD=0x31;

SSPSTATbits.SMP=0;
SSPSTATbits.CKE=0;

SSPCON1bits.SSPM3=1;
SSPCON1bits.SSPM2=0;
SSPCON1bits.SSPM1=0;
SSPCON1bits.SSPM0=0;

SSPCON1bits.SSPEN=1;

SSPCON2bits.SEN=1;

...

или тоже самое с использованием библиотеки:
Код:
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 0x31;
StartI2C();



цитирую мануал:
Чтобы инициировать формирование бита START на шине I2C, необходимо установить бит SEN (SSPCON2<0>) в "1" ...
... После формирования бита START устанавливается бит S и флаг прерывания SSPIF в "1", BGR загружается новым значением и начинается счет.
По окончании счета бит SEN (SSPCON2<0>) автоматически сбрасывается в "0"...

проблема в том что после установки бита SEN (SSPCON2<0>) в "1" ничего не происходит. То есть бит SEN,флаг SSPIF, бит S какими были такими и остаются сколько не жди.
При этом если RC3, RC4 были в "1" то дебугер отлавливает событие START, а если RC3, RC4 были до этого в "0" то не происходит и этого.
Создается такое впечатление что MSSP просто забирает себе выводы, но при этом даже не думает работать с ними.
Подскажите что я упустил из виду?
Ответить