<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>S12 / MagniV Microcontrollersのトピック56F8037 MSCAN QuickStartDemo problem</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/56F8037-MSCAN-QuickStartDemo-problem/m-p/150153#M4227</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;I want to use 56F8037 for CAN communication between two 56F8037 EVM boards. If i download mscan_demo into flash it wont work correctly. This demo uses can buffer2 for transmitting variable lenght data through CAN bus (in main while loop), it would be after each transmittion go into interrupt service routine TXfull, but for first time it prepare data prepare buffer2 and sends but no interrupt wont come. For second time it stuck on :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;while(!ioctl(MSCAN, MSCAN_SELECT_TXBUFF, MSCAN_TXBUFFER2))&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and COP then reset mcu.&lt;/P&gt;&lt;P&gt;probably the buffer is still ful and no data were transmitted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Complete demo code in attach.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;THX&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 15 Jul 2011 03:27:04 GMT</pubDate>
    <dc:creator>David_cz</dc:creator>
    <dc:date>2011-07-15T03:27:04Z</dc:date>
    <item>
      <title>56F8037 MSCAN QuickStartDemo problem</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/56F8037-MSCAN-QuickStartDemo-problem/m-p/150153#M4227</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;I want to use 56F8037 for CAN communication between two 56F8037 EVM boards. If i download mscan_demo into flash it wont work correctly. This demo uses can buffer2 for transmitting variable lenght data through CAN bus (in main while loop), it would be after each transmittion go into interrupt service routine TXfull, but for first time it prepare data prepare buffer2 and sends but no interrupt wont come. For second time it stuck on :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;while(!ioctl(MSCAN, MSCAN_SELECT_TXBUFF, MSCAN_TXBUFFER2))&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and COP then reset mcu.&lt;/P&gt;&lt;P&gt;probably the buffer is still ful and no data were transmitted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Complete demo code in attach.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;THX&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jul 2011 03:27:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/56F8037-MSCAN-QuickStartDemo-problem/m-p/150153#M4227</guid>
      <dc:creator>David_cz</dc:creator>
      <dc:date>2011-07-15T03:27:04Z</dc:date>
    </item>
    <item>
      <title>Re: 56F8037 MSCAN QuickStartDemo problem</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/56F8037-MSCAN-QuickStartDemo-problem/m-p/150154#M4228</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi again i have tried another setting of can bus with Quickstart no my code works perfectly in LoopBack mode but if i connect two 8037evm board together and load same codes to them program stops at line where is synchronization tested, if i disable this testing then i try to transmit data so no data are transmited and selected buffer2 is still full and interrupt TXempty is not executed.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So first problem is why node isnt synchronised with bus? And i think beacause of that transmitt buffer isnt depleted. But dont know why&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;THX&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;int main(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static UWord16 i, txlen = 4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static UWord16* pd;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initialize SYS, COP and pins&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; device_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable MSCAN&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_DEVICE, MSCAN_ENABLE);&lt;BR /&gt;&lt;BR /&gt;//******************************&lt;BR /&gt;//******************************&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enter soft-reset mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SLEEP, MSCAN_ON);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SOFT_RESET, MSCAN_ENABLE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...so we can continue configuration process here&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_ACC_MODE, MSCAN_ACC_MODE_2X32);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // open filter for standard IDs (let only lower byte matters, also IDE must be 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_ACC_MASKR_32_0, ~(MSCAN_Id2Idr(0xff) | MSCAN_IDR_IDE));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_ACC_IDR_32_0, MSCAN_Id2Idr(0x11));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // open filter for extended IDs (let only lower 22 bits matters, also IDE must be 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_ACC_MASKR_32_1, ~(MSCAN_Id2Idr(0x803fffff) | MSCAN_IDR_IDE));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_ACC_IDR_32_1, MSCAN_Id2Idr(0x80333333) | MSCAN_IDR_IDE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setting transfer speed and frames&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_CLOCK_SOURCE, MSCAN_IPBUS);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_PRESCALER, 40);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_SJW, MSCAN_SJW_1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_TSEG1, MSCAN_TSEG_8);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_TSEG2, MSCAN_TSEG_7);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SET_SAMPLING, MSCAN_3SAMPS_PER_BIT);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wake-up filter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_WAKEUP_FILTER, MSCAN_DISABLE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // boot off recovery&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_MANUAL_BOFF_RECOVERY, MSCAN_DISABLE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // loopback mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_LOOPBACK_MODE, MSCAN_DISABLE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // listen only mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_LISTEN_ONLY_MODE, MSCAN_DISABLE);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // exit soft-reset mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SLEEP, MSCAN_OFF);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_SOFT_RESET, MSCAN_DISABLE);&lt;BR /&gt;//******************************&lt;BR /&gt;//******************************&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now can configure CAN&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_STOP_IN_WAIT, MSCAN_DISABLE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TIMESTAMP_TIMER, MSCAN_DISABLE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_AUTO_WAKEUP, MSCAN_DISABLE);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now we can enable MSCAN interrupts (reset must be off)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_ERINT_SET_RSTATE_MODE, MSCAN_STAT_ALL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_ERINT_SET_TSTATE_MODE, MSCAN_STAT_ALL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_ERINT_DISABLE, MSCAN_STATCHNG | MSCAN_OVERRUN | MSCAN_WAKEUP);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable interrupts&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(INTC, INTC_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; archEnableInt();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // switch to transmit buffer 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!ioctl(MSCAN, MSCAN_SELECT_TXBUFF, MSCAN_TXBUFFER2))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // prepare Transmit buffer 2 to periodically transmit in the loop bellow&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN_TB, MSCANMB_SET_ID, 0x333333 | MSCAN_ID_EXT);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data pointer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd = ioctl(MSCAN_TB, MSCANMB_GET_DATAPTR, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initialize data for periodical transmission&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // (each 16bit word contains a single data byte)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[0] = 0x11;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[1] = 0x22;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[2] = 0x33;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[3] = 0x44;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[4] = 0x55;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[5] = 0x66;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[6] = 0x77;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pd[7] = 0x88;&lt;BR /&gt;&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!ioctl(MSCAN, MSCAN_TEST_SYNCH, NULL))&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do forever&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* disable RX interrupt which also touches the TX buffer selection */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_ERINT_DISABLE, MSCAN_RXFULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* switch to transmit buffer 2 (also waits until this buffer is empty) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!ioctl(MSCAN, MSCAN_SELECT_TXBUFF, MSCAN_TXBUFFER2))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN_TB, MSCANMB_SET_LEN, txlen);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* re-enable receiver interrupt */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_ERINT_ENABLE, MSCAN_RXFULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* transmit frame buffer 2 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TRANSMIT, MSCAN_TXBUFFER2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TINT_ENABLE, MSCAN_TXBUFFER2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(++txlen &amp;gt; 8)&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txlen = 1;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wait a while&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;50; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(COP, COP_CLEAR_COUNTER, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; archDelay(0xffff);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void MSCAN_ErrorISR(void)&lt;BR /&gt;{&lt;BR /&gt;#pragma interrupt saveall&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord16 err = ioctl(MSCAN, MSCAN_READ_EINT_FLAGS, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_CLEAR_EINT_FLAGS, err);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void MSCAN_WakeUpISR(void)&lt;BR /&gt;{&lt;BR /&gt;#pragma interrupt saveall&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_CLEAR_WINT_FLAG, NULL);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void MSCAN_RxFullISR(void)&lt;BR /&gt;{&lt;BR /&gt;#pragma interrupt saveall&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord32 id = ioctl(MSCAN_RB, MSCANMB_GET_ID, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord16 len = ioctl(MSCAN_RB, MSCANMB_GET_LEN, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord16 isRTR = ioctl(MSCAN_RB, MSCANMB_GET_RTR, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile UWord16 winf = ioctl(MSCAN, MSCAN_GET_WINNING_ACC_FILTER, NULL);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_LED_G2, GPIO_TOGGLE_PIN, LED_G2);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // respond to non-RTR 0x11 frames only&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(id == 0x11 &amp;amp;&amp;amp; !isRTR)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* use buffer 0 or 1 to send response back */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UWord16 txbuff = ioctl(MSCAN, MSCAN_SELECT_TXBUFF, MSCAN_TXBUFFER0 | MSCAN_TXBUFFER1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* have free buffer (either 0 or 1) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(txbuff)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord16* pdR = ioctl(MSCAN_RB, MSCANMB_GET_DATAPTR, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; register UWord16* pdT = ioctl(MSCAN_TB, MSCANMB_GET_DATAPTR, NULL);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // copy data (don't need to check the len)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[0] = pdR[0];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[1] = pdR[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[2] = pdR[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[3] = pdR[3];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[4] = pdR[4];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[5] = pdR[5];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[6] = pdR[6];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdT[7] = pdR[7];&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // prepare ID (extended), LEN&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN_TB, MSCANMB_SET_ID, 0x1111 | MSCAN_ID_EXT);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN_TB, MSCANMB_SET_LEN, len);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // transmit buffer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TRANSMIT, txbuff);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_LEDS, GPIO_TOGGLE_PIN, LED_R);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable tx-finished interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TINT_ENABLE, txbuff);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // LED responds to non-RTR ext 0x333333 frames only&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(id == 0x80333333 &amp;amp;&amp;amp; !isRTR)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_LEDS, GPIO_TOGGLE_PIN, LED_G);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear interrupt flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_CLEAR_RINT_FLAG, NULL);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void MSCAN_TxRdyISR(void)&lt;BR /&gt;{&lt;BR /&gt;#pragma interrupt saveall&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* what tx buffers are empty? */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UWord16 tint = ioctl(MSCAN, MSCAN_READ_TINT_FLAGS, NULL);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* only consider buffers recently sent */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tint &amp;amp;= ioctl(MSCAN, MSCAN_GET_ENABLED_TINT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(tint &amp;amp; MSCAN_TXBUFFER2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_LEDS, GPIO_TOGGLE_PIN, LED_Y2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(tint &amp;amp; ~(MSCAN_TXBUFFER2))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_LEDS, GPIO_TOGGLE_PIN, LED_Y);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* disable interrupts handled */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(MSCAN, MSCAN_TINT_DISABLE, tint);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;/*&lt;BR /&gt;&amp;nbsp;*&amp;nbsp; Initialize SYS and all GPIO modules.&lt;BR /&gt;&amp;nbsp;*/&lt;BR /&gt;void device_init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(SYS, SYS_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(COP, COP_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Note: This code is targeted to all 56F8xxx-based evaluation boards.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; So we need to check what GPIO instances are actually implemented */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_A&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_A, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_B&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_B, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_C&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_C, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_D&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_D, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_E&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_E, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef GPIO_F&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(GPIO_F, GPIO_INIT, NULL);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR /&gt;}﻿&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Aug 2011 16:04:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/56F8037-MSCAN-QuickStartDemo-problem/m-p/150154#M4228</guid>
      <dc:creator>David_cz</dc:creator>
      <dc:date>2011-08-03T16:04:56Z</dc:date>
    </item>
  </channel>
</rss>

