在寫ICS的Clock Generator時,似乎一定要用Block write的方式去寫,在IQM57-MC5上試的結果是醬....

沒有寫的很好,因為應該要去判斷busy或status去決定何時開時寫或停。

Sample code:

void Delay_Ctrl()
{
UINTN p=0;

for(p=0;p<255;p++)
{IoWrite8(0x80,0x77);}

}

//下面是main.

IoWrite8(SMBUS_BASE_ADDRESS+0,0xFF);     //clear status
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+5,0x13);    //block write時,當成count, 這裡是指要寫13個byte
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+0x0D,0x02);  //enable 32-byte buffer (E32B)
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x05);        //block data
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x83);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0xC0);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x05);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x74); //byte 4
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x00);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x00);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x00);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x04);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x25); //byte 9
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0xE0);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x52);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+7,0x0D);
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+04,0xD2);    //slave address,ICS的好像都是D2
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+03,0x00);    //command
Delay_Ctrl();
IoWrite8(SMBUS_BASE_ADDRESS+02,0x54);    //bit[4:2]=101, means block data
Delay_Ctrl();

文章標籤
全站熱搜
創作者介紹
創作者 pipiwau 的頭像
pipiwau

pipiwau的部落格

pipiwau 發表在 痞客邦 留言(0) 人氣(81)