📄 ms_rwreg.lst
字号:
C51 COMPILER V7.50 MS_RWREG 03/18/2008 22:29:09 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MS_RWREG
OBJECT MODULE PLACED IN ..\1out\Ms_RWreg.obj
COMPILER INVOKED BY: D:\设计软件\Keil\C51\BIN\C51.EXE ..\SCALER\Ms_RWreg.c BROWSE INCDIR(..\INC\;..\PANEL\;..\UI\;..\OPT
-ION\;..\SCALER\DSP\) DEFINE(MCU_TYPE_SEL=0) DEBUG OBJECTEXTEND PRINT(..\1out\Ms_RWreg.lst) OBJECT(..\1out\Ms_RWreg.obj)
line level source
1 /******************************************************************************
2 Copyright (c) 2005 MStar Semiconductor, Inc.
3 All rights reserved.
4
5 [Module Name]: Ms_RWreg.c
6 [Date]: 13-Jan-2005
7 [Comment]:
8 Mstar IC access functions.
9 [Reversion History]:
10 *******************************************************************************/
11 #define _MS_RWREG_C_
12
13 /********************
14 * INCLUDE FILES *
15 *********************/
16 #include <intrins.h>
17 #include "Project.h"
18 #include "Mcu_reg.h"
19 #include "Ms_RWreg.h"
20 #include "Ms7X_reg.h"
21 #include "debug.h"
22 #include "Mcu.h"//kevin
23 #include "Global.h"//kevin
24
25 #define Delay1us() _nop_()
26
27 /**********************
28 * FUNCTION PROTOTYPES *
29 ***********************/
30 #if ( BUS_TYPE_SEL == DIRECT_BUS )
31 #define MS_REG(addr) (((unsigned char xdata*)0)[addr])
32 #endif
33
34 //////////////////////////////////////////////////////////////////////////////
35 // <Name>: msBusInitial
36 //
37 // <Description>: MST I/O bus initialize.
38 //////////////////////////////////////////////////////////////////////////////
39
40 #if ( BUS_TYPE_SEL == SERIAL_BUS )
void mstBusInitial(void)
{
bCS_PIN = 0;
bSCL_PIN = 1;
bSDA_PIN = 1;
}
//////////////////////////////////////////////////////////////
// MST I/O control start.(serial bus)
//
// ________________
// CS ____/
// _____
// SCL ________/ \______
C51 COMPILER V7.50 MS_RWREG 03/18/2008 22:29:09 PAGE 2
// __________
// SDA _____/ \____
// \__________/
//////////////////////////////////////////////////////////////
void mstSPIStart(BIT bSelWrRd)
{
//disable EA bit
SET_SPI_CS(_HIGH);
SET_SPI_SCL(_LOW);
if (bSelWrRd == SPI_READ) // read bit
SET_SPI_SDA(_HIGH);
else // write bit
SET_SPI_SDA(_LOW);
SET_SPI_SCL(_HIGH);
SET_SPI_SCL(_LOW);
// release EA bit
}
//////////////////////////////////////////////////////////////
// Receive byte from MST chip.(serial bus)
//
// Arguments: bLast - last one bit
// (MS_IS_LAST_BIT/MS_NON_LAST_BIT)
// Return value: receive byte
//////////////////////////////////////////////////////////////
BYTE mstSPIReceiveByte(BOOL bLast)
{
BYTE ucIndex; // loop index
BYTE ucBuf = 0x00; // byte buffer
// disable all interrupt
SET_SPI_SDA(_HIGH); // preset SDA high
for (ucIndex=7; ucIndex!=0; ucIndex--)
{
SET_SPI_SCL(_HIGH);
Delay1us();
ucBuf <<= 1; // next
if (bSDA_PIN == _HIGH) // check SDA
ucBuf |= _BIT0; // set bit0
SET_SPI_SCL(_LOW);
}
if (bLast == MS_IS_LAST_BIT) // last one
SET_SPI_CS(_LOW);
// last bit
SET_SPI_SCL(_HIGH);
Delay1us();
ucBuf <<= 1; // next
if (bSDA_PIN == _HIGH) // check SDA
ucBuf |= _BIT0; // set bit0
C51 COMPILER V7.50 MS_RWREG 03/18/2008 22:29:09 PAGE 3
SET_SPI_SCL(_LOW);
if (bLast == MS_IS_LAST_BIT) // last one
{
SET_SPI_SDA(_HIGH);
SET_SPI_SCL(_HIGH);
}
if ((bit)(g_ucSystemFlag & ENTER_SPI_DEBUG) == TRUE)//20050920
SET_SPI_CS(_HIGH);
// release EA bit
return ucBuf;
}
//////////////////////////////////////////////////////////////
// Send byte to MST chip.(serial bus)
//
// Arguments: ucVal - output byte
// bLast - last one bit
// (MS_IS_LAST_BIT/MS_NON_LAST_BIT)
//////////////////////////////////////////////////////////////
void mstSPISendByte(BYTE ucVal, BOOL bLast)
{
BYTE ucIndex; // loop index
// disable all interrupt
for (ucIndex=7; ucIndex!=0; ucIndex--)
{
SET_SPI_SDA((bit)(ucVal & _BIT7));
ucVal <<= 1; // next
SET_SPI_SCL(_HIGH); // clock
Delay1us();
SET_SPI_SCL(_LOW);
}
if (bLast == MS_IS_LAST_BIT) // last one
SET_SPI_CS(_LOW);
// last bit
SET_SPI_SDA((bit)(ucVal & _BIT7));
Delay1us();
SET_SPI_SCL(_HIGH); // clock
Delay1us();
SET_SPI_SCL(_LOW);
if (bLast == MS_IS_LAST_BIT) // last one
{
SET_SPI_SDA(_HIGH);
SET_SPI_SCL(_HIGH);
}
if ((bit)(g_ucSystemFlag & ENTER_SPI_DEBUG) == TRUE)//20050920
SET_SPI_CS(_HIGH);
// release EA bit
}
#endif
C51 COMPILER V7.50 MS_RWREG 03/18/2008 22:29:09 PAGE 4
179
180 BYTE mstReadByte(BYTE ucAddr)
181 {
182 1 #if (BUS_TYPE_SEL == DIRECT_BUS)
183 1 return *((BYTE pdata*) ucAddr);
184 1 #elif ( BUS_TYPE_SEL == SERIAL_BUS )
mstSPIStart(SPI_READ); // read command
mstSPISendByte(ucAddr, MS_NON_LAST_BIT); // register index
return mstSPIReceiveByte(MS_IS_LAST_BIT); // read register data
#endif
190 1 }
191
192 WORD mstReadWord(BYTE ucAddr)
193 {
194 1 WORD uwValue;
195 1
196 1 #if (BUS_TYPE_SEL == DIRECT_BUS)
197 1 uwValue = mstReadByte(ucAddr);
198 1 uwValue = (uwValue << 8) |mstReadByte(ucAddr-1);
199 1
200 1 return uwValue;
201 1 #elif ( BUS_TYPE_SEL == SERIAL_BUS )
uwValue = mstReadByte(ucAddr);
uwValue = (uwValue * 0x100) + mstReadByte(ucAddr - 1);
return uwValue;
#endif
207 1 }
208
209 void mstWriteByte(BYTE ucAddr, BYTE ucValue)
210 {
211 1 #if (BUS_TYPE_SEL == DIRECT_BUS)
212 1 *((BYTE pdata*) ucAddr) = ucValue;
213 1 #elif ( BUS_TYPE_SEL == SERIAL_BUS )
mstSPIStart(SPI_WRITE); // write command
mstSPISendByte(ucAddr, MS_NON_LAST_BIT); // register index
mstSPISendByte(ucValue, MS_IS_LAST_BIT);
#endif
218 1
219 1 }
220
221 void mstWriteWord(BYTE ucAddr, WORD uwValue)
222 {
223 1 #if (BUS_TYPE_SEL == DIRECT_BUS)
224 1 mstWriteByte(ucAddr - 1, uwValue&0xFF);
225 1 mstWriteByte(ucAddr, uwValue>>8);
226 1 #elif ( BUS_TYPE_SEL == SERIAL_BUS )
mstWriteByte(ucAddr -1, (BYTE)uwValue);
mstWriteByte(ucAddr, (BYTE)(uwValue / 0x100));
#endif
230 1 }
231
232 void mstWriteData(BYTE addr, BYTE code *tbl, WORD count, bit inc)
233 {
234 1 count++;
235 1 while (count--)
236 1 {
237 2 mstWriteByte(addr, *(tbl++));
238 2 if(inc)
239 2 addr++;
240 2 }
C51 COMPILER V7.50 MS_RWREG 03/18/2008 22:29:09 PAGE 5
241 1 }
242
243 void mstWriteDataTable(BYTE code *s)
244 {
245 1 BYTE index, cnt;
246 1
247 1 while ((cnt = *s++) != -1)
248 1 {
249 2 index = *s++;
250 2 mstWriteData(index, s, cnt-1, 1);
251 2 s += cnt;
252 2 }
253 1
254 1 }
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 176 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -