DTEcmdProcess.s43
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:28k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1.         NAME DTEcmdProcess
  2.         RTMODEL "__double_size", "32"
  3.         RTMODEL "__pic", "no"
  4.         RTMODEL "__reg_r4", "free"
  5.         RTMODEL "__reg_r5", "free"
  6.         RTMODEL "__rt_version", "1"
  7.         RSEG CSTACK:DATA:SORT:NOROOT(1)
  8.         EXTERN aucViewData
  9.         EXTERN ViewCommunicationTX
  10.         FUNCTION ViewCommunicationTX,0202H
  11.         EXTERN ?Epilogue5
  12.         EXTERN ATcmdDelay
  13.         FUNCTION ATcmdDelay,0202H
  14.         EXTERN SendATcmd
  15.         FUNCTION SendATcmd,0202H
  16.         EXTERN gucUartRxCnt
  17.         EXTERN aucUartRxBuf
  18.         EXTERN SendATcmdModemSoftReset
  19.         FUNCTION SendATcmdModemSoftReset,0202H
  20.         EXTERN ?Epilogue8
  21.         EXTERN ?ShiftLeft16_6
  22.         EXTERN CalNextPageAddress
  23.         FUNCTION CalNextPageAddress,0202H
  24.         EXTERN ROW_ADDRESS_LOW
  25.         EXTERN ROW_ADDRESS_HIGH
  26.         EXTERN COMMAND_VAL
  27.         EXTERN COMMAND_LATCH_INTO
  28.         FUNCTION COMMAND_LATCH_INTO,0202H
  29.         EXTERN ADDRESS_VALUE
  30.         EXTERN ADDRESS_LATCH_INTO
  31.         FUNCTION ADDRESS_LATCH_INTO,0202H
  32.         EXTERN SoftUartTxOneFrame
  33.         FUNCTION SoftUartTxOneFrame,0202H
  34.         EXTERN gwGeneralPageAddress
  35.         EXTERN gwColumnAddress
  36.         EXTERN ?Epilogue6
  37.         EXTERN COLUMN_ADDRESS_HIGH
  38.         EXTERN READ_256_BYTE
  39.         FUNCTION READ_256_BYTE,0202H
  40.         EXTERN ?longjmp_r4
  41.         EXTERN ?longjmp_r5
  42.         EXTERN ?setjmp_r4
  43.         EXTERN ?setjmp_r5
  44.         PUBWEAK ?setjmp_save_r4
  45.         PUBWEAK ?setjmp_save_r5
  46.         PUBLIC DceResponsePc
  47.         FUNCTION DceResponsePc,021203H
  48.         LOCFRAME CSTACK, 4, STACK
  49.         PUBLIC DteGetFaxList
  50.         FUNCTION DteGetFaxList,021203H
  51.         LOCFRAME CSTACK, 24, STACK
  52.         PUBLIC DteGetModemBus
  53.         FUNCTION DteGetModemBus,021203H
  54.         LOCFRAME CSTACK, 2, STACK
  55.         PUBLIC DteGetOneFax
  56.         FUNCTION DteGetOneFax,021203H
  57.         LOCFRAME CSTACK, 14, STACK
  58.         PUBLIC DteReturnModemBus
  59.         FUNCTION DteReturnModemBus,021203H
  60.         LOCFRAME CSTACK, 12, STACK
  61.         PUBWEAK P2IN
  62.         PUBWEAK P2OUT
  63.         PUBWEAK P5DIR
  64.         PUBWEAK P5IN
  65.         PUBWEAK P6DIR
  66.         PUBWEAK P6OUT
  67.         
  68.         CFI Names cfiNames0
  69.         CFI StackFrame CFA SP DATA
  70.         CFI Resource PC:16, SP:16, SR:16, R4:16, R5:16, R6:16, R7:16, R8:16
  71.         CFI Resource R9:16, R10:16, R11:16, R12:16, R13:16, R14:16, R15:16
  72.         CFI EndNames cfiNames0
  73.         
  74.         CFI Common cfiCommon0 Using cfiNames0
  75.         CFI CodeAlign 2
  76.         CFI DataAlign 2
  77.         CFI ReturnAddress PC CODE
  78.         CFI CFA SP+2
  79.         CFI PC Frame(CFA, -2)
  80.         CFI SR Undefined
  81.         CFI R4 SameValue
  82.         CFI R5 SameValue
  83.         CFI R6 SameValue
  84.         CFI R7 SameValue
  85.         CFI R8 SameValue
  86.         CFI R9 SameValue
  87.         CFI R10 SameValue
  88.         CFI R11 SameValue
  89.         CFI R12 Undefined
  90.         CFI R13 Undefined
  91.         CFI R14 Undefined
  92.         CFI R15 Undefined
  93.         CFI EndCommon cfiCommon0
  94.         
  95. // E:projectFaxProgramVson_Bryan_Fax_Conexant_070423filesDTEcmdProcess.c
  96. //    1 /************************************************
  97. //    2 Description: 
  98. //    3       process Dte Command
  99. //    4 Input:
  100. //    5       none
  101. //    6 Output:
  102. //    7       none
  103. //    8 Update:
  104. //    9       2007.03.20 Bryan      add some function
  105. //   10       2007.1.25  Bryan      function header     create
  106. //   11 ************************************************/
  107. //   12 
  108. //   13 #include "includeH.h"
  109.         ASEGN DATA16_AN:DATA:NOROOT,028H
  110. // unsigned char const volatile __data P2IN
  111. P2IN:
  112.         DS8 1
  113.         ASEGN DATA16_AN:DATA:NOROOT,029H
  114. // unsigned char volatile __data P2OUT
  115. P2OUT:
  116.         DS8 1
  117.         ASEGN DATA16_AN:DATA:NOROOT,030H
  118. // unsigned char const volatile __data P5IN
  119. P5IN:
  120.         DS8 1
  121.         ASEGN DATA16_AN:DATA:NOROOT,032H
  122. // unsigned char volatile __data P5DIR
  123. P5DIR:
  124.         DS8 1
  125.         ASEGN DATA16_AN:DATA:NOROOT,035H
  126. // unsigned char volatile __data P6OUT
  127. P6OUT:
  128.         DS8 1
  129.         ASEGN DATA16_AN:DATA:NOROOT,036H
  130. // unsigned char volatile __data P6DIR
  131. P6DIR:
  132.         DS8 1
  133. //   14 
  134.         RSEG CODE:CODE:SORT:NOROOT(1)
  135. //   15 void DteGetModemBus(void)
  136. DteGetModemBus:
  137.         CFI Block cfiBlock0 Using cfiCommon0
  138.         CFI Function DteGetModemBus
  139. //   16 {
  140. //   17     MODEM_BUS_CON_PORT |= MODEM_BUS_2_MCU;
  141.         FUNCALL DteGetModemBus, ViewCommunicationTX
  142.         LOCFRAME CSTACK, 2, STACK
  143. BIS.B #0x10, &0x35
  144. //   18     MODEM_BUS_CON_PORT &= ~MODEM_BUS_2_PC; 
  145. BIC.B #0x8, &0x35
  146. //   19     gucViewStaticStatus &= ~bitViewReceiving;
  147. BIC.B #0x1, &aucViewData + 0x7
  148. //   20     gucViewStaticStatus |= bitViewSending;
  149. BIS.B #0x2, &aucViewData + 0x7
  150. //   21     ViewCommunicationTX(0x01);
  151. MOV.B #0x1, R12
  152. BR #ViewCommunicationTX
  153.         CFI EndBlock cfiBlock0
  154. //   22     
  155. //   23 }
  156. //   24 
  157. //   25 //*************************************************************************
  158.         RSEG CODE:CODE:NOROOT(1)
  159. //   26 void DteReturnModemBus(void)
  160. DteReturnModemBus:
  161.         CFI Block cfiBlock1 Using cfiCommon0
  162.         CFI Function DteReturnModemBus
  163. //   27 {
  164.         FUNCALL DteReturnModemBus, ATcmdDelay
  165.         LOCFRAME CSTACK, 12, STACK
  166.         FUNCALL DteReturnModemBus, SendATcmd
  167.         LOCFRAME CSTACK, 12, STACK
  168.         FUNCALL DteReturnModemBus, ATcmdDelay
  169.         LOCFRAME CSTACK, 12, STACK
  170.         FUNCALL DteReturnModemBus, ATcmdDelay
  171.         LOCFRAME CSTACK, 12, STACK
  172.         FUNCALL DteReturnModemBus, SendATcmdModemSoftReset
  173.         LOCFRAME CSTACK, 12, STACK
  174.         FUNCALL DteReturnModemBus, ATcmdDelay
  175.         LOCFRAME CSTACK, 12, STACK
  176.         FUNCALL DteReturnModemBus, ATcmdDelay
  177.         LOCFRAME CSTACK, 12, STACK
  178.         FUNCALL DteReturnModemBus, ViewCommunicationTX
  179.         LOCFRAME CSTACK, 12, STACK
  180. PUSH.W R10
  181.         CFI R10 Frame(CFA, -4)
  182.         CFI CFA SP+4
  183. PUSH.W R11
  184.         CFI R11 Frame(CFA, -6)
  185.         CFI CFA SP+6
  186. PUSH.W R8
  187.         CFI R8 Frame(CFA, -8)
  188.         CFI CFA SP+8
  189. PUSH.W R9
  190.         CFI R9 Frame(CFA, -10)
  191.         CFI CFA SP+10
  192. PUSH.W R6
  193.         CFI R6 Frame(CFA, -12)
  194.         CFI CFA SP+12
  195. //   28      unsigned int  wGeneralCount = 0;
  196. MOV.W #0x0, R6
  197. //   29      unsigned int  wOKcount=0;
  198. MOV.W #0x0, R11
  199. //   30      unsigned int  wNotOKcount=0; 
  200. MOV.W #0x0, R8
  201. //   31      unsigned char  ucRxIndex1=0;
  202. MOV.B #0x0, R9
  203. //   32      unsigned char  ucRxIndex0=0;
  204. MOV.B #0x0, R10
  205. //   33                     
  206. //   34     MODEM_BUS_CON_PORT |= MODEM_BUS_2_PC;
  207. BIS.B #0x8, &0x35
  208. //   35     MODEM_BUS_CON_PORT &= ~MODEM_BUS_2_MCU;
  209. BIC.B #0x10, &0x35
  210. //   36     while (1)
  211. //   37      {
  212. //   38       ATcmdDelay();
  213. ??DteReturnModemBus_1:
  214. CALL #ATcmdDelay
  215. //   39       SendATcmd();          
  216. CALL #SendATcmd
  217. //   40       ATcmdDelay();
  218. CALL #ATcmdDelay
  219. //   41       ATcmdDelay();
  220. CALL #ATcmdDelay
  221. //   42     
  222. //   43       while (wGeneralCount++<0xffff)
  223. ??DteReturnModemBus_0:
  224. MOV.W R6, R14
  225. MOV.W #0x1, R6
  226. ADD.W R14, R6
  227. CMP.W #0xffff, R14
  228. JEQ ??DteReturnModemBus_2
  229. //   44       {
  230. //   45        ucRxIndex1=gucUartRxCnt-3;
  231. MOV.B #0xfd, R14
  232. ADD.B &gucUartRxCnt, R14
  233. MOV.B R14, R9
  234. //   46        ucRxIndex0=gucUartRxCnt-2;
  235. MOV.B #0xfe, R14
  236. ADD.B &gucUartRxCnt, R14
  237. MOV.B R14, R10
  238. //   47        if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  239. AND.W #0xff, R10
  240. CMP.B #0xd, aucUartRxBuf(R10)
  241. JNE ??DteReturnModemBus_3
  242. AND.W #0xff, R9
  243. CMP.B #0x4b, aucUartRxBuf(R9)
  244. JNE ??DteReturnModemBus_3
  245. //   48         {wOKcount++;break;}
  246. ADD.W #0x1, R11
  247. JMP ??DteReturnModemBus_2
  248. //   49        if (wGeneralCount==0xffff)
  249. ??DteReturnModemBus_3:
  250. CMP.W #0xffff, R6
  251. JNE ??DteReturnModemBus_0
  252. //   50        {    
  253. //   51         //wGeneralCount=0;
  254. //   52         wNotOKcount++;
  255. ADD.W #0x1, R8
  256. //   53         SendATcmdModemSoftReset();
  257. CALL #SendATcmdModemSoftReset
  258. //   54         ATcmdDelay();
  259. CALL #ATcmdDelay
  260. //   55         ATcmdDelay();
  261. CALL #ATcmdDelay
  262. JMP ??DteReturnModemBus_0
  263. //   56        }//if
  264. //   57       }//while
  265. //   58       ucRxIndex1=gucUartRxCnt-3;
  266. ??DteReturnModemBus_2:
  267. MOV.B #0xfd, R14
  268. ADD.B &gucUartRxCnt, R14
  269. MOV.B R14, R9
  270. //   59       ucRxIndex0=gucUartRxCnt-2;
  271. MOV.B #0xfe, R14
  272. ADD.B &gucUartRxCnt, R14
  273. MOV.B R14, R10
  274. //   60       if ((0x0d==aucUartRxBuf[ucRxIndex0])&&(0x4B==aucUartRxBuf[ucRxIndex1]))
  275. AND.W #0xff, R10
  276. CMP.B #0xd, aucUartRxBuf(R10)
  277. JNE ??DteReturnModemBus_1
  278. AND.W #0xff, R9
  279. CMP.B #0x4b, aucUartRxBuf(R9)
  280. JNE ??DteReturnModemBus_1
  281. //   61         {wOKcount++;break;}
  282. ADD.W #0x1, R11
  283. //   62      }//while
  284. //   63 
  285. //   64      _NOP();
  286. NOP
  287. //   65      gucViewStaticStatus |= bitViewReceiving;
  288. BIS.B #0x1, &aucViewData + 0x7
  289. //   66      gucViewStaticStatus &= ~bitViewSending;
  290. BIC.B #0x2, &aucViewData + 0x7
  291. //   67      ViewCommunicationTX(0x01);
  292. MOV.B #0x1, R12
  293. CALL #ViewCommunicationTX
  294. //   68 }
  295. BR #?Epilogue5
  296.         CFI EndBlock cfiBlock1
  297. //   69 
  298. //   70 
  299. //   71 //*************************************************************************
  300.         RSEG CODE:CODE:NOROOT(1)
  301. //   72 void DteGetFaxList(void)
  302. DteGetFaxList:
  303.         CFI Block cfiBlock2 Using cfiCommon0
  304.         CFI Function DteGetFaxList
  305. //   73 {
  306.         FUNCALL DteGetFaxList, CalNextPageAddress
  307.         LOCFRAME CSTACK, 24, STACK
  308.         FUNCALL DteGetFaxList, COMMAND_LATCH_INTO
  309.         LOCFRAME CSTACK, 24, STACK
  310.         FUNCALL DteGetFaxList, ADDRESS_LATCH_INTO
  311.         LOCFRAME CSTACK, 24, STACK
  312.         FUNCALL DteGetFaxList, ADDRESS_LATCH_INTO
  313.         LOCFRAME CSTACK, 24, STACK
  314.         FUNCALL DteGetFaxList, ADDRESS_LATCH_INTO
  315.         LOCFRAME CSTACK, 24, STACK
  316.         FUNCALL DteGetFaxList, ADDRESS_LATCH_INTO
  317.         LOCFRAME CSTACK, 24, STACK
  318.         FUNCALL DteGetFaxList, COMMAND_LATCH_INTO
  319.         LOCFRAME CSTACK, 24, STACK
  320.         FUNCALL DteGetFaxList, SoftUartTxOneFrame
  321.         LOCFRAME CSTACK, 24, STACK
  322. PUSH.W R10
  323.         CFI R10 Frame(CFA, -4)
  324.         CFI CFA SP+4
  325. PUSH.W R11
  326.         CFI R11 Frame(CFA, -6)
  327.         CFI CFA SP+6
  328. PUSH.W R8
  329.         CFI R8 Frame(CFA, -8)
  330.         CFI CFA SP+8
  331. PUSH.W R9
  332.         CFI R9 Frame(CFA, -10)
  333.         CFI CFA SP+10
  334. PUSH.W R6
  335.         CFI R6 Frame(CFA, -12)
  336.         CFI CFA SP+12
  337. PUSH.W R7
  338.         CFI R7 Frame(CFA, -14)
  339.         CFI CFA SP+14
  340. PUSH.W R4
  341.         CFI R4 Frame(CFA, -16)
  342.         CFI CFA SP+16
  343. PUSH.W R5
  344.         CFI R5 Frame(CFA, -18)
  345.         CFI CFA SP+18
  346. SUB.W #0x6, SP
  347.         CFI CFA SP+24
  348. //   74  unsigned int wPageAddress=0, wBlockAddress=0,
  349. MOV.W #0x0, R7
  350. MOV.W #0x0, R5
  351. //   75               wColumnAddress=0,wNextPageAddress=0,
  352. MOV.W #0x0, R10
  353. MOV.W #0x0, 0x2(SP)
  354. //   76               wRearPntCnt=0;
  355. MOV.W #0x0, 0x4(SP)
  356. //   77  unsigned char ucRxIndex=0,
  357. MOV.B #0x0, R11
  358. //   78                ucGeneralCnt=0,ucFaxPropertyLenCnt,
  359. MOV.B #0x0, 0x0(SP)
  360. //   79                ucRxIndex3=0,ucRxIndex2=0,
  361. MOV.B #0x0, R4
  362. MOV.B #0x0, R8
  363. //   80                ucRxIndex0=0,ucRxIndex1=0;
  364. MOV.B #0x0, R9
  365. MOV.B #0x0, R6
  366. //   81 
  367. //   82        SOFTUART_PORT_DIRECTION |= bitSOFTUARTTX;//set SOFTUARTTX open SoftUart TX
  368. BIS.B #0x1, &0x36
  369. //   83   for (wBlockAddress=cstFaxPropertyTableStartBlockNum;
  370. MOV.W #0x1, R5
  371. //   84       wBlockAddress<=cstFaxPropertyTableOverBlockNum;wBlockAddress++)
  372. ??DteGetFaxList_5:
  373. CMP.W #0xb, R5
  374. JC ??DteGetFaxList_6
  375. //   85  {
  376. //   86  //1 block==64pages
  377. //   87  for (wPageAddress=(wBlockAddress<<6);wPageAddress<((wBlockAddress<<6)+64);wPageAddress++)
  378. MOV.W R5, R12
  379. CALL #?ShiftLeft16_6
  380. MOV.W R12, R7
  381. ??DteGetFaxList_4:
  382. MOV.W R5, R12
  383. CALL #?ShiftLeft16_6
  384. ADD.W #0x40, R12
  385. CMP.W R12, R7
  386. JC ??DteGetFaxList_7
  387. //   88  {
  388. //   89       do{
  389. //   90      wNextPageAddress=wPageAddress+64;
  390. ??DteGetFaxList_0:
  391. MOV.W #0x40, R14
  392. ADD.W R7, R14
  393. MOV.W R14, 0x2(SP)
  394. //   91      wPageAddress=CalNextPageAddress(wPageAddress);
  395. MOV.W R7, R12
  396. CALL #CalNextPageAddress
  397. MOV.W R12, R7
  398. //   92       }while(wNextPageAddress==wPageAddress);
  399. CMP.W R7, 0x2(SP)
  400. JEQ ??DteGetFaxList_0
  401. //   93       
  402. //   94       wColumnAddress=0;
  403. MOV.W #0x0, R10
  404. //   95       ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  405. MOV.B R7, &ROW_ADDRESS_LOW
  406. //   96       ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF;
  407. MOV.W R7, R14
  408. SWPB R14
  409. AND.W #0xff, R14
  410. MOV.B R14, &ROW_ADDRESS_HIGH
  411. //   97       
  412. //   98       //if a block no erase, one page can write 8 tiems(00 512 1024 1536 2048 2064 2080 2096)
  413. //   99       //So 8 times shall be readed within one page.
  414. //  100       for (ucGeneralCnt=0;ucGeneralCnt<8;ucGeneralCnt++)
  415. MOV.B #0x0, 0x0(SP)
  416. ??DteGetFaxList_3:
  417. CMP.B #0x8, 0x0(SP)
  418. JC ??DteGetFaxList_8
  419. //  101       {
  420. //  102 //COMMAND
  421. //  103    COMMAND_VAL=0x00; //#0X00 //00H READ1 0-2111BYTE
  422. MOV.B #0x0, &COMMAND_VAL
  423. //  104    COMMAND_LATCH_INTO();
  424. CALL #COMMAND_LATCH_INTO
  425. //  105 //ADDRESS
  426. //  106 
  427. //  107    ADDRESS_VALUE=wColumnAddress & 0xff;//COLUMN_ADDRESS_LOW;
  428. MOV.B R10, &ADDRESS_VALUE
  429. //  108    ADDRESS_LATCH_INTO();
  430. CALL #ADDRESS_LATCH_INTO
  431. //  109 
  432. //  110    ADDRESS_VALUE=(wColumnAddress>>8) & 0XFF;//COLUMN_ADDRESS_HIGH;
  433. MOV.W R10, R14
  434. SWPB R14
  435. AND.W #0xff, R14
  436. MOV.B R14, &ADDRESS_VALUE
  437. //  111    ADDRESS_LATCH_INTO();
  438. CALL #ADDRESS_LATCH_INTO
  439. //  112 
  440. //  113    ADDRESS_VALUE=ROW_ADDRESS_LOW;
  441. MOV.B &ROW_ADDRESS_LOW, &ADDRESS_VALUE
  442. //  114    ADDRESS_LATCH_INTO();
  443. CALL #ADDRESS_LATCH_INTO
  444. //  115 
  445. //  116    ADDRESS_VALUE=ROW_ADDRESS_HIGH;
  446. MOV.B &ROW_ADDRESS_HIGH, &ADDRESS_VALUE
  447. //  117    ADDRESS_LATCH_INTO();
  448. CALL #ADDRESS_LATCH_INTO
  449. //  118    FLASH_CON_PORT_OUT &=~ ALE;
  450. BIC.B #0x2, &0x29
  451. //  119 
  452. //  120    COMMAND_VAL=0X30;
  453. MOV.B #0x30, &COMMAND_VAL
  454. //  121    COMMAND_LATCH_INTO();
  455. CALL #COMMAND_LATCH_INTO
  456. //  122    //ATcmdDelay();
  457. //  123    while((FLASH_CON_PORT_IN & RB)==0);
  458. ??DteGetFaxList_1:
  459. BIT.B #0x20, &0x28
  460. JNC ??DteGetFaxList_1
  461. //  124    DATA_PORT_IN_INITIAL;
  462. MOV.B #0x0, &0x32
  463. //  125    for (ucFaxPropertyLenCnt=0;ucFaxPropertyLenCnt<16;ucFaxPropertyLenCnt++)
  464. MOV.B #0x0, 0x1(SP)
  465. ??DteGetFaxList_2:
  466. CMP.B #0x10, 0x1(SP)
  467. JC ??DteGetFaxList_9
  468. //  126    {
  469. //  127      FLASH_CON_PORT_OUT &=~ RE; //RE IS LOW,ENABLE READ DATA
  470. BIC.B #0x10, &0x29
  471. //  128      SoftUartTxOneFrame(DATA_PORT_IN);//add at Jan. 25, 2007
  472. MOV.B &0x30, R12
  473. CALL #SoftUartTxOneFrame
  474. //  129      aucUartRxBuf[ucRxIndex++]=DATA_PORT_IN;
  475. MOV.B R11, R14
  476. AND.W #0xff, R14
  477. MOV.B &0x30, aucUartRxBuf(R14)
  478. ADD.B #0x1, R11
  479. //  130      FLASH_CON_PORT_OUT |= RE;
  480. BIS.B #0x10, &0x29
  481. //  131    }
  482. ADD.B #0x1, 0x1(SP)
  483. JMP ??DteGetFaxList_2
  484. //  132    wRearPntCnt++;
  485. ??DteGetFaxList_9:
  486. ADD.W #0x1, 0x4(SP)
  487. //  133    ucRxIndex3=ucRxIndex-4;
  488. MOV.B #0xfc, R14
  489. ADD.B R11, R14
  490. MOV.B R14, R4
  491. //  134       ucRxIndex2=ucRxIndex-3;
  492. MOV.B #0xfd, R14
  493. ADD.B R11, R14
  494. MOV.B R14, R8
  495. //  135       ucRxIndex1=ucRxIndex-2;
  496. MOV.B #0xfe, R14
  497. ADD.B R11, R14
  498. MOV.B R14, R6
  499. //  136       ucRxIndex0=ucRxIndex-1;
  500. MOV.B #0xff, R14
  501. ADD.B R11, R14
  502. MOV.B R14, R9
  503. //  137      if (0xff == aucUartRxBuf[ucRxIndex0] && 0xff == aucUartRxBuf[ucRxIndex1] &&
  504. //  138         0xff == aucUartRxBuf[ucRxIndex2] && 0xff == aucUartRxBuf[ucRxIndex3])
  505. MOV.B R9, R14
  506. AND.W #0xff, R14
  507. CMP.B #0xff, aucUartRxBuf(R14)
  508. JNE ??DteGetFaxList_10
  509. MOV.B R6, R14
  510. AND.W #0xff, R14
  511. CMP.B #0xff, aucUartRxBuf(R14)
  512. JNE ??DteGetFaxList_10
  513. MOV.B R8, R14
  514. AND.W #0xff, R14
  515. CMP.B #0xff, aucUartRxBuf(R14)
  516. JNE ??DteGetFaxList_10
  517. MOV.B R4, R14
  518. AND.W #0xff, R14
  519. CMP.B #0xff, aucUartRxBuf(R14)
  520. JEQ ??DteGetFaxList_8
  521. //  139       {
  522. //  140       break;  //next rear   
  523. //  141       }//if
  524. //  142    if (ucGeneralCnt<4)
  525. ??DteGetFaxList_10:
  526. CMP.B #0x4, 0x0(SP)
  527. JC ??DteGetFaxList_11
  528. //  143   wColumnAddress+=512;
  529. ADD.W #0x200, R10
  530. JMP ??DteGetFaxList_12
  531. //  144           else
  532. //  145   wColumnAddress+=16;
  533. ??DteGetFaxList_11:
  534. ADD.W #0x10, R10
  535. //  146    }//for read next property pointer
  536. ??DteGetFaxList_12:
  537. ADD.B #0x1, 0x0(SP)
  538. JMP ??DteGetFaxList_3
  539. //  147    
  540. //  148    //ucRxIndex3=gucUartRxCnt-4;
  541. //  149     //ucRxIndex2=gucUartRxCnt-3;
  542. //  150     //ucRxIndex1=gucUartRxCnt-2;
  543. //  151     //ucRxIndex0=gucUartRxCnt-1;
  544. //  152    if (0xff == aucUartRxBuf[ucRxIndex0] && 0xff == aucUartRxBuf[ucRxIndex1] &&
  545. //  153       0xff == aucUartRxBuf[ucRxIndex2] && 0xff == aucUartRxBuf[ucRxIndex3])
  546. ??DteGetFaxList_8:
  547. MOV.B R9, R14
  548. AND.W #0xff, R14
  549. CMP.B #0xff, aucUartRxBuf(R14)
  550. JNE ??DteGetFaxList_13
  551. MOV.B R6, R14
  552. AND.W #0xff, R14
  553. CMP.B #0xff, aucUartRxBuf(R14)
  554. JNE ??DteGetFaxList_13
  555. MOV.B R8, R14
  556. AND.W #0xff, R14
  557. CMP.B #0xff, aucUartRxBuf(R14)
  558. JNE ??DteGetFaxList_13
  559. MOV.B R4, R14
  560. AND.W #0xff, R14
  561. CMP.B #0xff, aucUartRxBuf(R14)
  562. JEQ ??DteGetFaxList_7
  563. //  154      {break;}
  564. //  155    }//for next page
  565. ??DteGetFaxList_13:
  566. ADD.W #0x1, R7
  567. JMP ??DteGetFaxList_4
  568. //  156 /*   
  569. //  157    //send the 16 FaxProperty to PC (16*16=256bytes)
  570. //  158    ucRxIndex=0;
  571. //  159    for (wGeneralCnt=0;wGeneralCnt<256;wGeneralCnt++)//
  572. //  160    {
  573. //  161        SoftUartTxOneFrame(aucUartRxBuf[ucRxIndex++]);
  574. //  162        ucRxIndex3=ucRxIndex+3;
  575. //  163         ucRxIndex2=ucRxIndex+2;
  576. //  164         ucRxIndex1=ucRxIndex+1;
  577. //  165         ucRxIndex0=ucRxIndex+0;
  578. //  166         if (0xff == aucUartRxBuf[ucRxIndex0] && 0xff == aucUartRxBuf[ucRxIndex1] &&
  579. //  167           0xff == aucUartRxBuf[ucRxIndex2] && 0xff == aucUartRxBuf[ucRxIndex3])
  580. //  168         break;
  581. //  169    }
  582. //  170 */
  583. //  171    //ucRxIndex3=gucUartRxCnt-4;
  584. //  172     //ucRxIndex2=gucUartRxCnt-3;
  585. //  173     //ucRxIndex1=gucUartRxCnt-2;
  586. //  174     //ucRxIndex0=gucUartRxCnt-1;
  587. //  175    if (0xff == aucUartRxBuf[ucRxIndex0] && 0xff == aucUartRxBuf[ucRxIndex1] &&
  588. //  176       0xff == aucUartRxBuf[ucRxIndex2] && 0xff == aucUartRxBuf[ucRxIndex3])
  589. ??DteGetFaxList_7:
  590. MOV.B R9, R14
  591. AND.W #0xff, R14
  592. CMP.B #0xff, aucUartRxBuf(R14)
  593. JNE ??DteGetFaxList_14
  594. MOV.B R6, R14
  595. AND.W #0xff, R14
  596. CMP.B #0xff, aucUartRxBuf(R14)
  597. JNE ??DteGetFaxList_14
  598. MOV.B R8, R14
  599. AND.W #0xff, R14
  600. CMP.B #0xff, aucUartRxBuf(R14)
  601. JNE ??DteGetFaxList_14
  602. MOV.B R4, R14
  603. AND.W #0xff, R14
  604. CMP.B #0xff, aucUartRxBuf(R14)
  605. JEQ ??DteGetFaxList_6
  606. //  177      {break;}
  607. //  178  }//for next block
  608. ??DteGetFaxList_14:
  609. ADD.W #0x1, R5
  610. JMP ??DteGetFaxList_5
  611. //  179  gwGeneralPageAddress=wPageAddress; //for write Fax property record
  612. ??DteGetFaxList_6:
  613. MOV.W R7, &gwGeneralPageAddress
  614. //  180   gwColumnAddress=wColumnAddress;    //for write Fax property record
  615. MOV.W R10, &gwColumnAddress
  616. //  181         SOFTUART_PORT_DIRECTION &= ~bitSOFTUARTTX;//off the SoftUart
  617. BIC.B #0x1, &0x36
  618. //  182 }
  619. ADD.W #0x6, SP
  620.         CFI CFA SP+18
  621. BR #?Epilogue8
  622.         CFI EndBlock cfiBlock2
  623. //  183 
  624. //  184 //*************************************************************************
  625.         RSEG CODE:CODE:NOROOT(1)
  626. //  185 void DteGetOneFax(unsigned int wEveryFaxHead, unsigned int wEveryFaxRear)
  627. DteGetOneFax:
  628.         CFI Block cfiBlock3 Using cfiCommon0
  629.         CFI Function DteGetOneFax
  630. //  186 {
  631.         FUNCALL DteGetOneFax, READ_256_BYTE
  632.         LOCFRAME CSTACK, 14, STACK
  633.         FUNCALL DteGetOneFax, SoftUartTxOneFrame
  634.         LOCFRAME CSTACK, 14, STACK
  635.         FUNCALL DteGetOneFax, CalNextPageAddress
  636.         LOCFRAME CSTACK, 14, STACK
  637.         FUNCALL DteGetOneFax, CalNextPageAddress
  638.         LOCFRAME CSTACK, 14, STACK
  639. PUSH.W R10
  640.         CFI R10 Frame(CFA, -4)
  641.         CFI CFA SP+4
  642. PUSH.W R11
  643.         CFI R11 Frame(CFA, -6)
  644.         CFI CFA SP+6
  645. PUSH.W R8
  646.         CFI R8 Frame(CFA, -8)
  647.         CFI CFA SP+8
  648. PUSH.W R9
  649.         CFI R9 Frame(CFA, -10)
  650.         CFI CFA SP+10
  651. PUSH.W R6
  652.         CFI R6 Frame(CFA, -12)
  653.         CFI CFA SP+12
  654. PUSH.W R7
  655.         CFI R7 Frame(CFA, -14)
  656.         CFI CFA SP+14
  657. MOV.W R12, R6
  658. MOV.W R14, R10
  659. //  187       unsigned char ucFlashColumnAddCnt=0;
  660. MOV.B #0x0, R7
  661. //  188       
  662. //  189       //unsigned char  ucRxIndex=0;
  663. //  190       //unsigned char  ucBlockCnt=0;
  664. //  191       unsigned int 
  665. //  192                    wNextPageAddress=0,wPageAddress=0,
  666. MOV.W #0x0, R11
  667. MOV.W #0x0, R8
  668. //  193                    wGeneralCnt=0;
  669. MOV.W #0x0, R9
  670. //  194     //MODEM_BUS_CON_PORT |= SOFT_UART_2_PC;
  671. //  195     //SOFTUART_PORT_DIRECTION |= SOFT_UART_2_PC;
  672. //  196     SOFTUART_PORT_DIRECTION |= bitSOFTUARTTX;
  673. BIS.B #0x1, &0x36
  674. //  197     if (wEveryFaxHead<wEveryFaxRear)//(wEveryFaxHead!=wEveryFaxRear)//
  675. CMP.W R10, R6
  676. JC ??DteGetOneFax_5
  677. //  198       {
  678. //  199          
  679. //  200       for (wPageAddress=wEveryFaxHead;wPageAddress<=wEveryFaxRear;)//
  680. MOV.W R6, R8
  681. ??DteGetOneFax_3:
  682. CMP.W R8, R10
  683. JNC ??DteGetOneFax_5
  684. //  201       {
  685. //  202         
  686. //  203         ROW_ADDRESS_LOW = wPageAddress & 0xff;
  687. MOV.B R8, &ROW_ADDRESS_LOW
  688. //  204         ROW_ADDRESS_HIGH = (wPageAddress>>8) & 0xff;
  689. MOV.W R8, R14
  690. SWPB R14
  691. AND.W #0xff, R14
  692. MOV.B R14, &ROW_ADDRESS_HIGH
  693. //  205         for (ucFlashColumnAddCnt = 0;ucFlashColumnAddCnt < 8;ucFlashColumnAddCnt++)//8*256=2048
  694. MOV.B #0x0, R7
  695. ??DteGetOneFax_1:
  696. CMP.B #0x8, R7
  697. JC ??DteGetOneFax_6
  698. //  206         {
  699. //  207      //8 * 256 == 2048 Bytes 2^4*2^8 12bit column address HighColumnAddr:0~8
  700. //  208             //total 8*256B+64B=2K+64B
  701. //  209      COLUMN_ADDRESS_HIGH=ucFlashColumnAddCnt;
  702. MOV.B R7, &COLUMN_ADDRESS_HIGH
  703. //  210      READ_256_BYTE();//read 256 Byte to aucUartRxBuf[256]
  704. CALL #READ_256_BYTE
  705. //  211      for (wGeneralCnt=0;wGeneralCnt<256;wGeneralCnt++)//
  706. MOV.W #0x0, R9
  707. ??DteGetOneFax_0:
  708. CMP.W #0x100, R9
  709. JC ??DteGetOneFax_7
  710. //  212      {
  711. //  213  SoftUartTxOneFrame(aucUartRxBuf[wGeneralCnt]);
  712. MOV.B aucUartRxBuf(R9), R12
  713. CALL #SoftUartTxOneFrame
  714. //  214  if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)
  715. MOV.W #aucUartRxBuf, R14
  716. ADD.W R9, R14
  717. CMP.B #0xfb, 0xffff(R14)
  718. JNE ??DteGetOneFax_8
  719. MOV.W #aucUartRxBuf, R14
  720. ADD.W R9, R14
  721. CMP.B #0x13, 0xfffe(R14)
  722. JNE ??DteGetOneFax_8
  723. MOV.W #aucUartRxBuf, R14
  724. ADD.W R9, R14
  725. CMP.B #0xff, 0xfffd(R14)
  726. JNE ??DteGetOneFax_8
  727. //  215    {_NOP();break;}             
  728. NOP
  729. JMP ??DteGetOneFax_7
  730. //  216      }//third for
  731. ??DteGetOneFax_8:
  732. ADD.W #0x1, R9
  733. JMP ??DteGetOneFax_0
  734. //  217      if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)
  735. ??DteGetOneFax_7:
  736. MOV.W #aucUartRxBuf, R14
  737. ADD.W R9, R14
  738. CMP.B #0xfb, 0xffff(R14)
  739. JNE ??DteGetOneFax_9
  740. MOV.W #aucUartRxBuf, R14
  741. ADD.W R9, R14
  742. CMP.B #0x13, 0xfffe(R14)
  743. JNE ??DteGetOneFax_9
  744. MOV.W #aucUartRxBuf, R14
  745. ADD.W R9, R14
  746. CMP.B #0xff, 0xfffd(R14)
  747. JEQ ??DteGetOneFax_6
  748. //  218    break;        
  749. //  219         }//second for
  750. ??DteGetOneFax_9:
  751. ADD.B #0x1, R7
  752. JMP ??DteGetOneFax_1
  753. //  220         
  754. //  221        if (aucUartRxBuf[wGeneralCnt-1] == 0xfb && aucUartRxBuf[wGeneralCnt-2] == 0x13 && aucUartRxBuf[wGeneralCnt-3] == 0xff)//pageimage over
  755. ??DteGetOneFax_6:
  756. MOV.W #aucUartRxBuf, R14
  757. ADD.W R9, R14
  758. CMP.B #0xfb, 0xffff(R14)
  759. JNE ??DteGetOneFax_10
  760. MOV.W #aucUartRxBuf, R14
  761. ADD.W R9, R14
  762. CMP.B #0x13, 0xfffe(R14)
  763. JNE ??DteGetOneFax_10
  764. MOV.W #aucUartRxBuf, R14
  765. ADD.W R9, R14
  766. CMP.B #0xff, 0xfffd(R14)
  767. JNE ??DteGetOneFax_10
  768. //  222           {                                                 
  769. //  223             /*//Record the front pointer for Check new in DCE
  770. //  224             ATcmdDelay();// a bug of Dec.23,2006 FF 10 00 0E // receive data delay(if not, can't receive 0x10 0x03)
  771. //  225             if ((gwGeneralPageAddress>>6) > cstFaxFrontPointerTableOverBlockNum)
  772. //  226            {
  773. //  227             for (ucBlockCnt=0;ucBlockCnt<4;ucBlockCnt++)
  774. //  228             {
  775. //  229                  wPageAddress=(cstFaxFrontPointerTableStartBlockNum+ucBlockCnt)<<6;
  776. //  230            ROW_ADDRESS_LOW=wPageAddress & 0XFF;
  777. //  231            ROW_ADDRESS_HIGH=(wPageAddress>>8) & 0XFF; 
  778. //  232            ERASE_ONE_BLOCK();
  779. //  233             }
  780. //  234             gwGeneralPageAddress = cstFaxFrontPointerTableStartPage;
  781. //  235             gwColumnAddress=0;
  782. //  236            }
  783. //  237            
  784. //  238             //Record the front pointer for Check new in DCE
  785. //  239             
  786. //  240             ReadLastFaxFrontPointer();    
  787. //  241             ucRxIndex=0; //write Fax Front Pointer
  788. //  242             aucUartRxBuf[ucRxIndex++]=wPageAddress & 0xff;
  789. //  243             aucUartRxBuf[ucRxIndex++]=(wPageAddress>>8) & 0xff;
  790. //  244             for (ucBlockCnt=0; ucBlockCnt<12; ucBlockCnt++)
  791. //  245             {
  792. //  246              aucUartRxBuf[ucRxIndex++]=0x55;
  793. //  247             }
  794. //  248             //WriteFaxFrontPointerTable();
  795. //  249             Write16Bytes2FlashMemoryArea();
  796. //  250             */
  797. //  251             wPageAddress++;
  798. ADD.W #0x1, R8
  799. //  252             if(wPageAddress==0)
  800. CMP.W #0x0, R8
  801. JNE ??DteGetOneFax_2
  802. //  253                wPageAddress += cstFaxContentStartPage;//2560;//Mar. 1, 20007
  803. ADD.W #0x1400, R8
  804. //  254             do{
  805. //  255        wNextPageAddress=wPageAddress+64;
  806. ??DteGetOneFax_2:
  807. MOV.W #0x40, R14
  808. ADD.W R8, R14
  809. MOV.W R14, R11
  810. //  256        wPageAddress=CalNextPageAddress(wPageAddress);
  811. MOV.W R8, R12
  812. CALL #CalNextPageAddress
  813. MOV.W R12, R8
  814. //  257        }while(wNextPageAddress==wPageAddress);
  815. CMP.W R8, R11
  816. JEQ ??DteGetOneFax_2
  817. JMP ??DteGetOneFax_3
  818. //  258              //ReadLastFaxFrontPointer();//read next write fax front pointer addr    //delete at Jan. 19, 2007
  819. //  259             continue;//break; a bug of Dec. 12,2006
  820. //  260           }
  821. //  261           wPageAddress++;
  822. ??DteGetOneFax_10:
  823. ADD.W #0x1, R8
  824. //  262           if(wPageAddress==0)
  825. CMP.W #0x0, R8
  826. JNE ??DteGetOneFax_4
  827. //  263                wPageAddress += cstFaxContentStartPage;//2560;//Mar. 1, 20007
  828. ADD.W #0x1400, R8
  829. //  264             do{
  830. //  265        wNextPageAddress=wPageAddress+64;//wNextPageAddress=gwPageAddress+64;
  831. ??DteGetOneFax_4:
  832. MOV.W #0x40, R14
  833. ADD.W R8, R14
  834. MOV.W R14, R11
  835. //  266        wPageAddress=CalNextPageAddress(wPageAddress);
  836. MOV.W R8, R12
  837. CALL #CalNextPageAddress
  838. MOV.W R12, R8
  839. //  267        }while(wNextPageAddress==wPageAddress);             
  840. CMP.W R8, R11
  841. JEQ ??DteGetOneFax_4
  842. JMP ??DteGetOneFax_3
  843. //  268        }//third for ----> next page
  844. //  269        
  845. //  270        }//if wNewFaxHead<wNewFaxRear
  846. //  271        //MODEM_BUS_CON_PORT &= ~SOFT_UART_2_PC;
  847. //  272        //SOFTUART_PORT_DIRECTION &= ~SOFT_UART_2_PC;
  848. //  273        SOFTUART_PORT_DIRECTION &= ~bitSOFTUARTTX;
  849. ??DteGetOneFax_5:
  850. BIC.B #0x1, &0x36
  851. //  274 }//DteGetOneFax function over 
  852. BR #?Epilogue6
  853.         CFI EndBlock cfiBlock3
  854. //  275 
  855. //  276 /*
  856. //  277 void SetSystemTime(unsigned char ucYear, unsigned char ucMonth, unsigned char ucDate, 
  857. //  278                    unsigned char ucHour, unsigned char ucMinute, unsigned char ucSecond)
  858. //  279 {
  859. //  280 
  860. //  281 ;
  861. //  282 } 
  862. //  283 */ 
  863. //  284 
  864.         RSEG CODE:CODE:NOROOT(1)
  865. //  285 void DceResponsePc(void)
  866. DceResponsePc:
  867.         CFI Block cfiBlock4 Using cfiCommon0
  868.         CFI Function DceResponsePc
  869. //  286 {
  870.         FUNCALL DceResponsePc, SoftUartTxOneFrame
  871.         LOCFRAME CSTACK, 4, STACK
  872. PUSH.W R10
  873.         CFI R10 Frame(CFA, -4)
  874.         CFI CFA SP+4
  875. //  287        unsigned char ucRxIndex=0;
  876. MOV.B #0x0, R10
  877. //  288        for (ucRxIndex=0; ucRxIndex<8; ucRxIndex++)
  878. MOV.B #0x0, R10
  879. ??DceResponsePc_0:
  880. CMP.B #0x8, R10
  881. JC ??DceResponsePc_1
  882. //  289        SoftUartTxOneFrame(aucUartRxBuf[ucRxIndex]);     
  883. MOV.B R10, R14
  884. AND.W #0xff, R14
  885. MOV.B aucUartRxBuf(R14), R12
  886. CALL #SoftUartTxOneFrame
  887. ADD.B #0x1, R10
  888. JMP ??DceResponsePc_0
  889. //  290 } 
  890. ??DceResponsePc_1:
  891. POP.W R10
  892.         CFI R10 SameValue
  893.         CFI CFA SP+2
  894. RET
  895.         CFI EndBlock cfiBlock4
  896.         RSEG CODE:CODE:NOROOT(1)
  897. ?setjmp_save_r4:
  898. REQUIRE ?setjmp_r4
  899. REQUIRE ?longjmp_r4
  900.         RSEG CODE:CODE:NOROOT(1)
  901. ?setjmp_save_r5:
  902. REQUIRE ?setjmp_r5
  903. REQUIRE ?longjmp_r5
  904.         END
  905. // 
  906. // 1 026 bytes in segment CODE
  907. //     6 bytes in segment DATA16_AN
  908. // 
  909. // 1 026 bytes of CODE memory
  910. //     0 bytes of DATA memory (+ 6 bytes shared)
  911. //
  912. //Errors: none
  913. //Warnings: none