аппаратный i2c на c18
код:
//частота 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 просто забирает себе выводы, но при этом даже не думает работать с ними.
Подскажите что я упустил из виду?
|