SSL_CpuRegisterTest.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**********************************************************************
  2. * © 2010 Microchip Technology Inc.
  3. *
  4. * FileName: SSL_CpuRegisterTest.c
  5. * Dependencies: Header (.h) files if applicable, see below
  6. * Processor: PIC16FXXX
  7. * Compiler: C18 v3.41
  8. *
  9. * SOFTWARE LICENSE AGREEMENT:
  10. * Microchip Technology Inc. (“Microchip”) licenses this software to you
  11. * solely for use with Microchip PIC® microcontroller
  12. * products. The software is owned by Microchip and is protected under
  13. * applicable copyright laws. All rights reserved.
  14. *
  15. * SOFTWARE IS PROVIDED “AS IS.” MICROCHIP EXPRESSLY DISCLAIMS ANY
  16. * WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
  17. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  18. * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP
  19. * BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
  20. * DAMAGES, LOST PROFITS OR LOST dataC, HARM TO YOUR EQUIPMENT, COST OF
  21. * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
  22. * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
  23. * ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
  24. *
  25. * REVISION HISTORY:
  26. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. * Author Date Comments on this revision
  28. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  29. *CT 09/15/2008 First release of source file
  30. *Mike Cahill 11/11/2010 Updated for HI-TECH v9.80
  31. *MVL 02/22/2011 Modified for HI-TECH v9.80 & v9.81
  32. *VR 06/22/2012 Modified for C18 v3.41
  33. *
  34. *Version 1.03
  35. *
  36. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  37. * ADDITIONAL NOTES:
  38. *
  39. **********************************************************************/
  40. #include "SSL_CpuRegisterTest.h"
  41. volatile uint8_t tempWF, tempREG;
  42. /********************************************************************************************
  43. * Function Name: SSL_8bit_CPU_RegisterTest
  44. *
  45. * Description : The "SSL_8bit_CPU_RegisterTest" function tests the CPU W register for stuck up
  46. * faults, insuring that bits in the registers are not stuck at a value. This test can be done
  47. * by successively doing a write, read and check of 0x55 & 0xAA value into the W register.
  48. * The Register is saved into RAM before the test is performed and restored after the test is done.
  49. *
  50. * Input : None
  51. *
  52. * Returns : return value = 0 Test FAIL
  53. * return value = 1 Test PASS
  54. *********************************************************************************************/
  55. uint16_t SSL_CPU_RegisterTest( )
  56. {
  57. uint8_t cpuTestResult;
  58. // save the original value of W
  59. _asm
  60. MOVWF tempWF,1
  61. /* Test WREG with 0x55 */
  62. MOVLW 0x55
  63. MOVWF tempREG,1
  64. _endasm
  65. cpuTestResult= Test_Register(tempREG, 0x55);
  66. if(cpuTestResult == CPU_REGISTER_TEST_FAIL)
  67. {
  68. _asm
  69. MOVF tempWF,0,1
  70. _endasm
  71. return CPU_REGISTER_TEST_FAIL;
  72. }
  73. // Test WREG with 0xAA
  74. _asm
  75. MOVLW 0xAA
  76. MOVWF tempREG,1
  77. _endasm
  78. cpuTestResult= Test_Register(tempREG, 0xAA);
  79. if(cpuTestResult==CPU_REGISTER_TEST_FAIL)
  80. {
  81. _asm
  82. MOVF tempWF,0,1
  83. _endasm
  84. return CPU_REGISTER_TEST_FAIL;
  85. }
  86. // POP the W-reg before return
  87. _asm
  88. MOVF tempWF,0,1
  89. _endasm
  90. //cpuTestResult = CPU_REGISTER_TEST_PASS ;
  91. return CPU_REGISTER_TEST_PASS;
  92. }
  93. uint16_t Test_Register(uint8_t tempREG, uint8_t value)
  94. {
  95. if (tempREG != value)
  96. {
  97. return CPU_REGISTER_TEST_FAIL;
  98. }
  99. else
  100. {
  101. return CPU_REGISTER_TEST_PASS;
  102. }
  103. }