在寫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();
