/elekIO/testAT96.c

http://github.com/Yniold/liftsrc · C · 113 lines · 84 code · 19 blank · 10 comment · 3 complexity · be6633baab42f4b2eb7d660701c412fa MD5 · raw file

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/io.h>
  5. #include <stdint.h>
  6. #include <ctype.h>
  7. #include <string.h>
  8. #include <errno.h>
  9. #include <sys/types.h>
  10. #include <sys/time.h>
  11. #include <fcntl.h>
  12. #include <unistd.h>
  13. #include "../include/elekIO.h"
  14. #define DEBUGLEVEL 10
  15. // PC Version
  16. //
  17. int elkInit (void)
  18. {
  19. int ret;
  20. ret=ioperm(ELK_BASE, 50, 1);
  21. return (ret);
  22. }
  23. //=====================================================================================================
  24. int elkExit (void)
  25. {
  26. int ret;
  27. ret=ioperm(ELK_BASE, 50, 0); // we don't need it anymore
  28. return (ret);
  29. }
  30. //=====================================================================================================
  31. int elkWriteData(uint16_t Adress, uint16_t Data)
  32. {
  33. #if (DEBUGLEVEL > 0)
  34. printf("Write Data 0x%04x to port 0x%04x\n",Data,Adress);
  35. #endif
  36. outw(Data, Adress);
  37. }
  38. // end elkWriteData(uint16_t Adress, uint16_t Data)
  39. //
  40. //=====================================================================================================
  41. int elkReadData(uint16_t Adress)
  42. {
  43. int ret;
  44. uint16_t ElkReadData;
  45. ElkReadData = inw(Adress);
  46. return(ElkReadData);
  47. }
  48. //======================================================================================================
  49. int main(int argc, char *argv[])
  50. {
  51. int ret;
  52. int i;
  53. int ArgCount;
  54. int Addr;
  55. int Value;
  56. if(argc < 2)
  57. {
  58. printf("AT96 Test. Usage 'test (w/r) adress data\n'");
  59. exit(-1);
  60. };
  61. printf("Test program for AT96 backplane\n");
  62. printf(" init Linux rights..");
  63. ret=elkInit();
  64. printf(" returns : 0x%04x \n",ret);
  65. ArgCount=1; // next argument
  66. switch(argv[ArgCount++][0])
  67. {
  68. case 'r':
  69. Addr=strtol(argv[ArgCount],NULL,0);
  70. ArgCount++;
  71. Value=elkReadData((uint16_t) Addr);
  72. printf("Read %04x(%05d) : %04x(%05d)\n",Addr,Addr, Value, Value);
  73. printf("%d\n",Value);
  74. break;
  75. case 'w':
  76. if(argc>3) // better check here before messing around with argv[], hartwig :)
  77. {
  78. Addr=strtol(argv[ArgCount],NULL,0);
  79. ArgCount++;
  80. Value=strtol(argv[ArgCount],NULL,0);
  81. ArgCount++;
  82. ret=elkWriteData((uint16_t) Addr,(uint16_t)Value);
  83. // printf("Wrote %4x=%4x(%5d) : %4x(%5d)\n",ret,Addr,Addr,Value,Value);
  84. break;
  85. }
  86. default:
  87. printf("Unknown Command\n");
  88. printf(" exit ..");
  89. ret=elkExit();
  90. printf(" returns : 0x%x \n",ret);
  91. }
  92. exit(0);
  93. };
  94. /* main */