register.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "main.h"
  2. #include "options.h"
  3. #include "register.h"
  4. #define SH_SET rFIO0SET|=(1<<8) //
  5. #define SH_CLR rFIO0CLR|=(1<<8) // shift
  6. #define ST_SET rFIO0SET|=(1<<7) //
  7. #define ST_CLR rFIO0CLR|=(1<<7) // store
  8. #define DS_SET rFIO0SET|=(1<<6) //
  9. #define DS_CLR rFIO0CLR|=(1<<6) // data
  10. #ifdef SC8v7_ADRF5040
  11. #define PWR_PIN_EN rFIO0SET|=(1<<9) // enable power
  12. #define PWR_PIN_DS rFIO0CLR|=(1<<9) // disable power
  13. #endif
  14. int InitRegister( void )
  15. {
  16. rPINSEL0 &= ~((1<<12)|(1<<13)|(1<<14)|(1<<15)|(1<<16)|(1<<17)|(1<<18)|(1<<19)); // GPIO
  17. rPINMODE0 = (rPINMODE0 & (~((1<<12)|(1<<13)|(1<<14)|(1<<15)|(1<<16)|(1<<17)|(1<<18)|(1<<19)))) | ((1<<13)|(1<<15)|(1<<17)|(1<<19)); // Without pull-resistors
  18. rPINMODE_OD0 = rPINMODE_OD0 & (~((1<<6)|(1<<7)|(1<<8)|(1<<9))); // Turn off Open Drain mode
  19. rFIO0DIR |= (1<<6)|(1<<7)|(1<<8)|(1<<9); // Output
  20. rFIO0CLR |= (1<<6)|(1<<7)|(1<<8)|(1<<9); // Zeros
  21. #ifdef SC8v7_ADRF5040
  22. PWR_PIN_EN; // enable RF-Board power via MCU-PIN
  23. #endif
  24. return 1;
  25. }
  26. static void Wait( int count )
  27. {
  28. while(count--);
  29. }
  30. static void WaitShift( void )
  31. {
  32. // òàêòîâàÿ ÷àñòîòà 12ÌÃö ----> 100KHz
  33. Wait(12);
  34. }
  35. static void WaitSet( void )
  36. {
  37. // òàêòîâàÿ ÷àñòîòà 12ÌÃö ----> 100KHz
  38. Wait(12);
  39. }
  40. static void ShiftChar( char a )
  41. {
  42. for(int i = 7;i>=0; i-- )
  43. {
  44. SH_CLR;
  45. if( a & (1<<i) )
  46. DS_SET;
  47. else
  48. DS_CLR;
  49. WaitSet(); // wait for setup DATA on DS line
  50. SH_SET;
  51. WaitShift();
  52. }
  53. }
  54. static void Store( void )
  55. {
  56. ST_SET;
  57. Wait(12);
  58. ST_CLR;
  59. }
  60. static void Idle( void )
  61. {
  62. SH_CLR;
  63. ST_CLR;
  64. DS_CLR;
  65. }
  66. void ShiftRegisterOutData( char * data, int count )
  67. {
  68. Idle();
  69. while( count -- ) ShiftChar( *data++ );
  70. Store();
  71. Idle();
  72. }