山本ワールド
I2C拡張ライブラリー
概要
I2CのサポートはXC8のライブラリに含まれている。
ただし、STARTコンディションの発行が成功しデーター送受信途中にエラーが発生した場合、ストップコンディションを発行しなければデバイスを解放できない。
1byte送信のたびにエラー処理を行うのは煩雑なので、1byte書き込み関数にエラー時のストップコンディション発行を追加した。
使用する場合はi2c_ex.hをインクルードしi2c_ex.cをプロジェクトに追加してください。
I2Cバスの仕様については、次のページに記述がある。
http://www.nxp.com/documents/user_manual/UM10204_JA.pdf
プログラムの説明
ソースファイル
以下のファイルで構成されているi2c_ex.c ・・・ I2C 拡張ライブラリー Version 1.00 i2c_ex.h ・・・ I2C 拡張ライブラリー Version 1.00
サブルーチン
以下のサブルーチンをサポート
i2c_write
スレーブへ1byte書き込む。エラー発生時はSTOPコンディションを発行する
ソースコード
i2c_ex.h
/*
* I2C 拡張ライブラリー Version 1.00
* File: i2c_ex.h
* Target: PIC18F14K50 48Mhz
* コンパイラ: Microchip MPLAB XC8 C Compiler V1.20
* 書き込み: PICKit 3
* リリース: 2013/09/29 15:00
*
*/
#ifndef I2C_EX_H
#define I2C_EX_H
signed char i2c_write(unsigned char d); // I2Cスレーブへ1byte送信する
#define TRY 2 // エラー時のリトライ回数
#endif // I2C_EX_H
i2c_ex.c
/*
* I2C 拡張ライブラリー Version 1.00
* File: i2c_ex.c
* Target: PIC18F14K50 48Mhz
* コンパイラ: Microchip MPLAB XC8 C Compiler V1.20
* 書き込み: PICKit 3
* リリース: 2013/09/29 15:00
*
*/
#include <p18f14k50.h>
#include <plib\delays.h>
#include <plib\i2c.h>
#include "i2c_ex.h"
// I2Cスレーブへ1byte送信する
// コリジョン処理及びエラー時に確実にコマンドを終了できるようにSTOPコンディション出力を追加
signed char i2c_write(unsigned char d){
signed char ret;
ret=WriteI2C(d);
if(ret){
SSPCON1bits.WCOL=0;
StopI2C();
while(SSPCON2bits.PEN);
return ret; // -1:WCOL -2:NACK
}
IdleI2C();
return 0;
}
Copyright (C) 2012 山本ワールド All Rights Reserved.