关于wince下SAA7113/Salin8113控制的参考代码


//Date:2008-09-28
//Author:Mercury Xu
//Descrption:saa7113/Salin8113驅動程式編寫注意事項

對于這次調試saa7113/Salin8113程式,主要出錯的地方是寫寄存器地址的時候字符型和整型是需要注意的重點。
關于I2C的操作已經是很成熟的。可以不用考慮錯誤的原因。
重點注意的是saa7113/Salin8113寄存器賦值需要用到整型賦值,用字符型的saa7113/Salin8113無法識別
具體實現代碼如下。代碼基于WINCE開發。I2C部分請參考我的上一篇文章
http://blog.csdn.net/xumercury/archive/2008/09/20/2954449.aspx
以下給出頭文件的定義。

  1. #ifndef _SAA_H_ 
  2. #define _SAA_H_
  3. #define DELAY_CNT   50         //Delay 50 us
  4. #define SAA7113_WriteID  0x4A//0x48    //[SAA] Write address
  5. #define SAA7113_ReadID   0x4B//0x49    //[SAA] Read  address
  6. #define   TIMERTICK    (v_pDriverGlobals->sysclk.dwSystemClock/(1000000*2))       //delay basic num
  7. #define   NTSC       1        //set show type
  8. typedef enum OPERA_MODE {
  9.     READ = 1,
  10.     WRITE = 2
  11. } T_OPERA_MODE;
  12. unsigned int SAA7113Table[] = {
  13.                                 0x08,0x80,0x23,0x00,0x00,0xE9,0x0D,0x88,0x01,0x80,0x47,0x48,0x00,0x01,0x00,0x10,
  14.                                 0x1c,0xc8,0x11,0x00,0x00,0x82,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  15.                                 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x54,0x07,
  16.                                 0x83,0x00
  17.                                     
  18.                              }; 
  19. /*
  20.                                 0x08,0x80,0x23,0x00,0x00,0xE9,0x0D,0x88,0x01,0x80,0x47,0x48,0x00,0x01,0x00,0x10,
  21.                                 0x1c,0xc8,0x11,0x00,0x00,0x82,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  22.                                 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x54,0x07,
  23.                                 0x83,0x00
  24.                                 0x08,0xC1,0x33,0x00,0x00,0xE9,0x0D,0xB8,0x01,0x80,0x47,0x40,0x00,0x01,0x2A,0x38,
  25.                                 0x00,0xf7,0x00,0x3E,0x00,0x00,0x02,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  26.                                 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x07,
  27.                                 0x80,0x00
  28.                                 //modify the second 0xc0 to 0xc1 20080920 Mercury Xu
  29.                                 //modify the 0x11 -> 0x0c to 0x00  20080920 Mercury Xu
  30.                                 //modify the 0x13 -> 0x01 to 0x00  20080920 Mercury Xu
  31.                                 
  32. */
  33. unsigned int SAA7113Address[] = { 
  34.                                  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
  35.                                  0x11,0x12,0x13,0x15,0x16,0x17,0x40,0x41,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,
  36.                                  0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,
  37.                                  0x5B,0x5E
  38.                             
  39.                                  
  40.                                 };
  41. /*
  42.                                  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
  43.                                  0x11,0x12,0x13,0x15,0x16 ,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,
  44.                                  0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,
  45.                                  0x5B,0x5E
  46.                                  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
  47.                                  0x11,0x12,0x13,0x15,0x16,0x17,0x40,0x41,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,
  48.                                  0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,
  49.                                  0x5B,0x5E
  50.                                  
  51.                                  
  52.  */
  53. // Copyright Mercury's CO.,LTD.2007-2008
  54. // Author : Mercury Xu
  55. // Descript: this file for SAA chip,it's a dll entry function 
  56. // in this file include the SAA_XXX function for driver the chip
  57. // as a stream device.At the same time,in the bsp package we define
  58. // other function for make suer that this device can reset.use 
  59. // Mercury's define function from gpio.h head file.
  60. //update log
  61. //create by : 2008-03-21 mercury xu 
  62. //add by : 2008-04-03 mercury xu add define into the file change old file struct.
  63. //add by : 2008-04-04 mercury xu add some variables for ioctr function
  64. //modify by : 2008-07-30 mercury xu change it for SAA
  65. /
  66.         //=============================================================================
  67.         //Title : WrToSAA
  68.         //Detail: Write Data To SAA
  69.         //Input : addr data
  70.         //Output: none
  71.         //Author: Mercury Xu
  72.         //Data  : 2008-07-30
  73.         //=============================================================================
  74.         void WrToSAA7113(unsigned int addr,unsigned int data);
  75.         //=============================================================================
  76.         //Title : initial_SAA
  77.         //Detail: initial SAA chip
  78.         //Input : none
  79.         //Output: none
  80.         //Author: Mercury Xu
  81.         //Data  : 2008-07-30
  82.         //=============================================================================
  83.         void initial_SAA7113();
  84.         //=============================================================================
  85.         //Title : ReceiveAck
  86.         //Detail: Receive Ack from SAA chip
  87.         //Input : none
  88.         //Output: int
  89.         //Author: Mercury Xu
  90.         //Data  : 2008-07-30
  91.         //=============================================================================
  92.         int ReceiveAck();
  93.         //=============================================================================
  94.         //Title : StopBit
  95.         //Detail: StopBit  from SAA chip
  96.         //Input : none
  97.         //Output: none
  98.         //Author: Mercury Xu
  99.         //Data  : 2008-07-30
  100.         //=============================================================================
  101.         void StopBit();
  102.         //=============================================================================
  103.         //Title : StartBit
  104.         //Detail: StartBit  from SAA chip
  105.         //Input : none
  106.         //Output: none
  107.         //Author: Mercury Xu
  108.         //Data  : 2008-07-30
  109.         //=============================================================================
  110.         void StartBit();
  111.         //=============================================================================
  112.         //Title : WrData
  113.         //Detail: WrData to SAA chip
  114.         //Input : none
  115.         //Output: none
  116.         //Author: Mercury Xu
  117.         //Data  : 2008-07-30
  118.         //=============================================================================
  119.         void WrData(unsigned int data);
  120.         //=============================================================================
  121.         //Title : SAA_reset
  122.         //Detail: SAA_reset to SAA chip
  123.         //Input : none
  124.         //Output: none
  125.         //Author: Mercury Xu
  126.         //Data  : 2008-07-30
  127.         //=============================================================================
  128.               //  void SAA_reset();
  129. ///
  130. //modify by mercury xu  Mercury's 20080401
  131. //this segment for define some useful little function.usually use in the program.
  132. //there are including some functions as following words
  133. //sdio_high()
  134. //sdio_low()
  135. //sclk_high()
  136. //sclk_low()
  137. //sdio_output_enable()
  138. //sdio_input_enable()
  139. //sdio_getdata()
  140. ///
  141. //update log
  142. //create by mercury xu  20070401
  143. ///
  144. void sleepio(long usVal);
  145. ///
  146. void sdio_high();
  147. ///
  148. void sdio_low();
  149. ///
  150. void sclk_high();
  151. ///
  152. void sclk_low();
  153. //
  154. void sdio_output_enable();
  155. //
  156. void sdio_input_enable();
  157. //
  158. int sdio_getdata();
  159. //end segment
  160. ///
  161. void sdio_reset();
  162. extern "C" unsigned char OperationSAA7113(T_OPERA_MODE operation, unsigned int *data, unsigned int numBytes);
  163. /
  164. extern "C" BOOL CALLBACK DllMain(HANDLE hDLL,DWORD dwReason,LPVOID lpvReserved);
  165. //
  166. //------------------------------------------------------------------------------
  167. // @xref                          <nl>
  168. //          <f SAA_Init>,         <nl>
  169. //          <f SAA_Deinit>,       <nl>
  170. //          <f SAA_Open>,         <nl>
  171. //          <f SAA_Close>,        <nl>
  172. //          <f SAA_Read>,         <nl>
  173. //          <f SAA_Write>,        <nl>
  174. //          <f SAA_Seek>,         <nl>
  175. //          <f SAA_PowerUp>,      <nl>
  176. //          <f SAA_PowerDown>,    <nl>
  177. //          <f SAA_IOControl>     <nl>
  178. //
  179. // -----------------------------------------------------------------------------
  180. extern "C" DWORD SAA_Init(DWORD Index);
  181. // -----------------------------------------------------------------------------
  182. //
  183. //  @doc    WDEV_EXT
  184. //
  185. //  @func   PVOID | SAA_Deinit | Device deinitialization routine
  186. //
  187. //  @parm   DWORD | dwData | value returned from SAA_Init call
  188. //
  189. //  @rdesc  Returns TRUE for success, FALSE for failure.
  190. //
  191. // -----------------------------------------------------------------------------
  192. //extern "C" BOOL SAA_Deinit(DWORD dwData);
  193. // -----------------------------------------------------------------------------
  194. //
  195. //  @doc    WDEV_EXT
  196. //
  197. //  @func   PVOID | SAA_Open    | Device open routine
  198. //
  199. //  @parm   DWORD | dwData      | Value returned from SAA_Init call (ignored)
  200. //
  201. //  @parm   DWORD | dwAccess    | Requested access (combination of GENERIC_READ
  202. //                                and GENERIC_WRITE) (ignored)
  203. //
  204. //  @parm   DWORD | dwShareMode | Requested share mode (combination of
  205. //                                FILE_SHARE_READ and FILE_SHARE_WRITE) (ignored)
  206. //
  207. //  @rdesc  Returns a DWORD which will be passed to Read, Write, etc or NULL if
  208. //          unable to open device.
  209. //
  210. // -----------------------------------------------------------------------------
  211. extern "C" PDWORD SAA_Open( DWORD dwData,
  212.                            DWORD dwAccess,
  213.                            DWORD dwShareMode);
  214. // -----------------------------------------------------------------------------
  215. //
  216. //  @doc    WDEV_EXT
  217. //
  218. //  @func   BOOL | SAA_Close | Device close routine
  219. //
  220. //  @parm   DWORD | dwOpenData | Value returned from SAA_Open call
  221. //
  222. //  @rdesc  Returns TRUE for success, FALSE for failure
  223. //
  224. // -----------------------------------------------------------------------------
  225. //extern "C" BOOL SAA_Close(PDWORD pdwData);
  226. // -----------------------------------------------------------------------------
  227. //
  228. //  @doc    WDEV_EXT
  229. //
  230. //  @func   DWORD | SAA_Read | Device read routine
  231. //
  232. //  @parm   DWORD | dwOpenData | Value returned from SAA_Open call (ignored)
  233. //
  234. //  @parm   LPVOID | pBuf | Buffer to receive data (ignored)
  235. //
  236. //  @parm   DWORD | len | Maximum length to read (ignored)
  237. //
  238. //  @rdesc  Returns 0 always. SAA_Read should never get called and does
  239. //          nothing. Required DEVICE.EXE function, but all data communication
  240. //          is handled by <f SAA_IOControl>.
  241. //
  242. // -----------------------------------------------------------------------------
  243. extern "C" DWORD SAA_Read(DWORD dwData,
  244.                           LPVOID pBuf,
  245.                           DWORD Len);
  246. // -----------------------------------------------------------------------------
  247. //
  248. //  @doc    WDEV_EXT
  249. //
  250. //  @func   DWORD | SAA_Write | Device write routine
  251. //
  252. //  @parm   DWORD | dwOpenData | Value returned from SAA_Open call (ignored)
  253. //
  254. //  @parm   LPCVOID | pBuf | Buffer containing data (ignored)
  255. //
  256. //  @parm   DWORD | len | Maximum length to write (ignored)
  257. //
  258. //  @rdesc  Returns 0 always. SAA_Write should never get called and does
  259. //          nothing. Required DEVICE.EXE function, but all data communication
  260. //          is handled by <f SAA_IOControl>.
  261. //
  262. // -----------------------------------------------------------------------------
  263. extern "C" DWORD SAA_Write(DWORD dwData,
  264.                            LPCVOID pBuf,
  265.                            DWORD Len);
  266. // -----------------------------------------------------------------------------
  267. //
  268. //  @doc    WDEV_EXT
  269. //
  270. //  @func   DWORD | SAA_Seek | Device seek routine
  271. //
  272. //  @parm   DWORD | dwOpenData | Value returned from SAA_Open call (ignored)
  273. //
  274. //  @parm   long | pos | Position to seek to (relative to type) (ignored)
  275. //
  276. //  @parm   DWORD | type | FILE_BEGIN, FILE_CURRENT, or FILE_END (ignored)
  277. //
  278. //  @rdesc  Returns -1 always. SAA_Seek should never get called and does
  279. //          nothing. Required DEVICE.EXE function, but all data communication
  280. //          is handled by <f SAA_IOControl>.
  281. //
  282. // -----------------------------------------------------------------------------
  283. extern "C" DWORD SAA_Seek(DWORD dwData,
  284.                           long pos,
  285.                           DWORD type);
  286. // -----------------------------------------------------------------------------
  287. //
  288. //  @doc    WDEV_EXT
  289. //
  290. //  @func   void | SAA_PowerUp | Device powerup routine
  291. //
  292. //  @comm   Called to restore device from suspend mode.  Cannot call any
  293. //          routines aside from those in the dll in this call.
  294. //
  295. // -----------------------------------------------------------------------------
  296. extern "C" VOID SAA_PowerUp(VOID);
  297. // -----------------------------------------------------------------------------
  298. //
  299. //  @doc    WDEV_EXT
  300. //
  301. //  @func   void | SAA_PowerDown | Device powerdown routine
  302. //
  303. //  @comm   Called to suspend device.  Cannot call any routines aside from
  304. //          those in the dll in this call.
  305. //
  306. // -----------------------------------------------------------------------------
  307. //extern "C" VOID SAA_PowerDown(VOID);
  308. // -----------------------------------------------------------------------------
  309. //
  310. //  @doc    WDEV_EXT
  311. //
  312. //  @func   BOOL | SAA_IOControl | Device IO control routine
  313. //
  314. //  @parm   DWORD | dwOpenData | Value returned from SAA_Open call
  315. //
  316. //  @parm   DWORD | dwCode |
  317. //          IO control code for the function to be performed. SAA_IOControl only
  318. //          supports one IOCTL value (IOCTL_SAA_MESSAGE)
  319. //
  320. //  @parm   PBYTE | pBufIn |
  321. //          Pointer to the input parameter structure (<t MMDRV_MESSAGE_PARAMS>).
  322. //
  323. //  @parm   DWORD | dwLenIn |
  324. //          Size in bytes of input parameter structure (sizeof(<t MMDRV_MESSAGE_PARAMS>)).
  325. //
  326. //  @parm   PBYTE | pBufOut | Pointer to the return value (DWORD).
  327. //
  328. //  @parm   DWORD | dwLenOut | Size of the return value variable (sizeof(DWORD)).
  329. //
  330. //  @parm   PDWORD | pdwActualOut | Unused
  331. //
  332. //  @rdesc  Returns TRUE for success, FALSE for failure
  333. //
  334. //  @xref   <t SAAe Input Driver Messages> (WIDM_XXX) <nl>
  335. //          <t SAAe Output Driver Messages> (WODM_XXX)
  336. //
  337. // -----------------------------------------------------------------------------
  338. extern "C" BOOL SAA_IOControl(PDWORD  pdwOpenData,
  339.                               DWORD  dwCode,
  340.                               PBYTE  pBufIn,
  341.                               DWORD  dwLenIn,
  342.                               PBYTE  pBufOut,
  343.                               DWORD  dwLenOut,
  344.                               PDWORD pdwActualOut);
  345. #endif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值