Advertisement
Guest User

Untitled

a guest
May 25th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. #include <hidef.h> /* common defines and macros */
  2. #include "derivative.h" /* derivative-specific definitions */
  3.  
  4. #define SET(x, y) (x) |= (y)
  5. #define CLR(x, y) (x) &= (~(y))
  6. #define TGL(x, y) (x) ^= (y)
  7.  
  8. #define ST_ID_100 0x100
  9.  
  10. #define ACC_CODE_ID100 0x2000
  11. #define ACC_CODE_ID100_HIGH ((ACC_CODE_ID100 & 0xFF00)>>8)
  12. #define ACC_CODE_ID100_LOW (ACC_CODE_ID100 & 0x00FF)
  13.  
  14. /* Mask Code Definitions */
  15. #define MASK_CODE_ST_ID 0x0007
  16. #define MASK_CODE_ST_ID_HIGH ((MASK_CODE_ST_ID & 0xFF00)>>8)
  17. #define MASK_CODE_ST_ID_LOW (MASK_CODE_ST_ID & 0xFF)
  18.  
  19. /* leds */
  20.  
  21. #define LED_PORT PTS
  22. #define LED1_MASK PTS_PTS2_MASK
  23. #define LED2_MASK PTS_PTS3_MASK
  24.  
  25. #define LED_DDR DDRS
  26. #define LED_DDR_INIT ( DDRS_DDRS2_MASK | DDRS_DDRS3_MASK )
  27.  
  28. #define LEDS_INIT() SET(LED_DDR, LED_DDR_INIT)
  29.  
  30. #define LED_ON(mask) SET(LED_PORT, mask)
  31. #define LED_OFF(mask) CLR(LED_PORT, mask)
  32. #define LED_TGL(mask) TGL(LED_PORT, mask)
  33.  
  34. void canInit()
  35. {
  36. CANCTL0 = 0x01;
  37. while(!(CANCTL1 & 0x01));
  38.  
  39. CANCTL1 = 0xA0;
  40. CANBTR0 = 0xC7;
  41. CANBTR1 = 0x3A;
  42.  
  43. /* Acceptance Filters */
  44. CANIDAC = 0x10; /* Set four 16-bit Filters */
  45. CANIDAR0 = ACC_CODE_ID100_HIGH; //|\ 16-bit Filter 0
  46. CANIDMR0 = MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
  47. CANIDAR1 = ACC_CODE_ID100_LOW; //| / with ID 0x100
  48. CANIDMR1 = MASK_CODE_ST_ID_LOW; //|/
  49. /* Acceptance Filters */
  50. CANIDAC = 0x10; /* Set four 16-bit Filters */
  51. CANIDAR2 = 0x00; //|\ 16-bit Filter 1
  52. CANIDMR2 = MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
  53. CANIDAR3 = 0x00; //| / with ID 0x100
  54. CANIDMR3 = MASK_CODE_ST_ID_LOW; //|/
  55. CANIDAR4 = 0x00; //|\ 16-bit Filter 2
  56. CANIDMR4 = MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
  57. CANIDAR5 = 0x00; //| / with ID 0x100
  58. CANIDMR5 = MASK_CODE_ST_ID_LOW; //|/
  59. CANIDAR6 = 0x00; //|\ 16-bit Filter 3
  60. CANIDMR6 = MASK_CODE_ST_ID_HIGH; //| \__ Accepts Standard Data Frame Msg
  61. CANIDAR7 = 0x00; //| / with ID 0x100
  62. CANIDMR7 = MASK_CODE_ST_ID_LOW; //|/
  63. CANCTL0 = 0x00; /* Exit Initialization Mode Request */
  64.  
  65. while ((CANCTL1&0x00) != 0); /* Wait for Normal Mode */
  66. }
  67.  
  68. unsigned char canSendFrame(unsigned long id, unsigned char priority, unsigned char length, unsigned char *txdata)
  69. {
  70. unsigned char txbuffer;
  71. unsigned char index;
  72.  
  73. if(!CANTFLG) return 1;
  74.  
  75. CANTBSEL = CANTFLG;
  76. txbuffer = CANTBSEL;
  77.  
  78. *((unsigned long *) ((unsigned long)(&CANTXIDR0))) = id;
  79.  
  80. for (index=0;index<length;index++) {
  81. *(&CANTXDSR0 + index) = txdata[index];
  82. }
  83. CANTXDLR = length; /* Set Data Length Code */
  84. CANTXTBPR = priority; /* Set Priority */
  85. CANTFLG = txbuffer; /* Start transmission */
  86. while ( (CANTFLG & txbuffer) != txbuffer);
  87. }
  88.  
  89. interrupt 38 void canRxHandler(void)
  90. {
  91. unsigned char length, index;
  92. unsigned char rxdata[8];
  93.  
  94. length = (CANRXDLR & 0x0F);
  95.  
  96. for (index=0; index<length; index++)
  97. rxdata[index] = *(&CANRXDSR0 + index); /* Get received data */
  98.  
  99. CANRFLG = 0x01; /* Clear RXF */
  100. }
  101.  
  102. void main(void)
  103. {
  104. unsigned char errorflag;
  105. unsigned char txbuff[] = "abcd";
  106.  
  107. canInit();
  108.  
  109. while (!(CANCTL0 & 0x10));
  110.  
  111. CANRFLG = 0xC3;
  112. CANRIER = 0x01;
  113.  
  114. EnableInterrupts;
  115.  
  116. for (;;)
  117. {
  118. errorflag = canSendFrame((ST_ID_100), 0x00, sizeof(txbuff)-1, txbuff);
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement