00001
00002
00003 #include "global.h"
00004
00005
00006 #include "i2c.h"
00007 #include "cy22150.h"
00008
00009
00010 void cy22150Init(void)
00011 {
00012
00013 cy22150WriteReg(CY22150_REG_DIV1, 8);
00014 cy22150WriteReg(CY22150_REG_DIV2, 8);
00015
00016
00017
00018
00019 cy22150WriteReg(CY22150_REG_CAPLOAD, (u08)((20-(2+6))/0.09375) );
00020 }
00021
00022
00023 void cy22150SetOutput(u08 clkpin, u08 enable)
00024 {
00025
00026 if(enable)
00027 cy22150WriteReg(CY22150_REG_CLKOE, cy22150ReadReg(CY22150_REG_CLKOE) | (1<<clkpin));
00028 else
00029 cy22150WriteReg(CY22150_REG_CLKOE, cy22150ReadReg(CY22150_REG_CLKOE) & ~(1<<clkpin));
00030 }
00031
00032 void cy22150SetDiv(u08 divreg, u08 div)
00033 {
00034 switch(divreg)
00035 {
00036 case 0: cy22150WriteReg(CY22150_REG_DIV1, div); break;
00037 case 1: cy22150WriteReg(CY22150_REG_DIV2, div); break;
00038 }
00039 }
00040
00041 void cy22150SetQ(int q)
00042 {
00043 if(q<2)
00044 return;
00045
00046 cy22150WriteReg(CY22150_REG_QCNT, ((q-2)&0x7F) );
00047 }
00048
00049 void cy22150SetP(int p)
00050 {
00051 u08 pump;
00052 int pb;
00053
00054
00055 if(p<45) pump = 0;
00056 else if(p<480) pump = 1;
00057 else if(p<640) pump = 2;
00058 else if(p<800) pump = 3;
00059 else pump = 4;
00060
00061
00062 pb = (p/2)-4;
00063
00064
00065 cy22150WriteReg(CY22150_REG_PBHI, 0xC0 | (pump<<2) | ((pb>>8)&0x03) );
00066 cy22150WriteReg(CY22150_REG_PBLO, (pb&0xFF) );
00067 }
00068
00069 void cy22150WriteReg(u08 addr, u08 data)
00070 {
00071 u08 packet[2];
00072
00073 packet[0] = addr;
00074 packet[1] = data;
00075
00076 i2cMasterSend(CY22150_I2C_ADDR, 2, packet);
00077 }
00078
00079 u08 cy22150ReadReg(u08 addr)
00080 {
00081 u08 data;
00082
00083 i2cMasterSend(CY22150_I2C_ADDR, 1, &addr);
00084
00085 i2cMasterReceive(CY22150_I2C_ADDR, 1, &data);
00086
00087 return data;
00088 }