<?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>Kinetis MicrocontrollersのトピックKEA128 CAN driver problem</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KEA128-CAN-driver-problem/m-p/623159#M37295</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am working on CAN driver for KEA128 microcontroller. I have referred some of the sample code and prepared CAN driver.&lt;BR /&gt;But I am not able make it work. I am not able to see pulses on the TX pin of the controller on the uC.&lt;/P&gt;&lt;P&gt;Below is CLK code to obtain 48MHZ:&lt;BR /&gt;ICS_C1 = (1 &amp;lt;&amp;lt; ICS_C1_IREFSTEN_SHIFT)&lt;BR /&gt;| ICS_C1_CLKS(0)&lt;BR /&gt;| (1 &amp;lt;&amp;lt; ICS_C1_IRCLKEN_SHIFT);&lt;BR /&gt;while (!(ICS_S &amp;amp; ICS_S_LOCK_MASK)); // wait for FLL to lock&lt;BR /&gt;SIM_CLKDIV = SIM_CLKDIV_OUTDIV1(0)&lt;BR /&gt;| (1 &amp;lt;&amp;lt; SIM_CLKDIV_OUTDIV2_SHIFT)&lt;BR /&gt;| (0 &amp;lt;&amp;lt; SIM_CLKDIV_OUTDIV3_SHIFT);&lt;BR /&gt;ICS_C2 = ICS_C2_BDIV(0);&lt;/P&gt;&lt;P&gt;Below is the CAN Init code:&lt;BR /&gt;void Can_Init(uint8 Baudrate)&lt;BR /&gt;{&lt;BR /&gt;/* Enter to Initial mode. */&lt;BR /&gt;MSCAN_CANCTL0 = INITMODE_CAN0;&lt;/P&gt;&lt;P&gt;while(REG_CANCTL1_INITAK_CAN0 == INITMODE_BIT_CAN0)&lt;BR /&gt;{&lt;BR /&gt;/* Wait for init acknowledge */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANCTL1_CAN0 = CANCTL1_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR1_CAN0 = CANBTR1_CAN0;&lt;/P&gt;&lt;P&gt;if(Baudrate == CAN_BAUDRATE_500K)&lt;BR /&gt;{&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR0_CAN0 = CANBTR0_CAN_500K;&lt;BR /&gt;Can_BaudRate_Status = CAN_BAUDRATE_500K;&lt;BR /&gt;}&lt;BR /&gt;else if(Baudrate == CAN_BAUDRATE_250K)&lt;BR /&gt;{&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR0_CAN0 = CANBTR0_CAN_250K;&lt;BR /&gt;Can_BaudRate_Status = CAN_BAUDRATE_250K;&lt;BR /&gt;}&lt;BR /&gt;else&lt;BR /&gt;{&lt;BR /&gt;/* No Actions Required */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Acceptance filter register. */&lt;BR /&gt;REG_CANIDAC_CAN0 = ACC_FILTER_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the Message Object Acceptance Code. */&lt;BR /&gt;REG_CANIDAR0_CAN0 = ID_CODE0_CAN0;&lt;BR /&gt;REG_CANIDAR1_CAN0 = ID_CODE1_CAN0;&lt;BR /&gt;REG_CANIDAR2_CAN0 = ID_CODE2_CAN0;&lt;BR /&gt;REG_CANIDAR3_CAN0 = ID_CODE3_CAN0;&lt;BR /&gt;REG_CANIDAR4_CAN0 = ID_CODE4_CAN0;&lt;BR /&gt;REG_CANIDAR5_CAN0 = ID_CODE5_CAN0;&lt;BR /&gt;REG_CANIDAR6_CAN0 = ID_CODE6_CAN0;&lt;BR /&gt;REG_CANIDAR7_CAN0 = ID_CODE7_CAN0;&lt;BR /&gt;/* Set the Identifier mask register */&lt;BR /&gt;REG_CANIDMR0_CAN0 = ID_MASK0_CAN0;&lt;BR /&gt;REG_CANIDMR1_CAN0 = ID_MASK1_CAN0;&lt;BR /&gt;REG_CANIDMR2_CAN0 = ID_MASK2_CAN0;&lt;BR /&gt;REG_CANIDMR3_CAN0 = ID_MASK3_CAN0;&lt;BR /&gt;REG_CANIDMR4_CAN0 = ID_MASK4_CAN0;&lt;BR /&gt;REG_CANIDMR5_CAN0 = ID_MASK5_CAN0;&lt;BR /&gt;REG_CANIDMR6_CAN0 = ID_MASK6_CAN0;&lt;BR /&gt;REG_CANIDMR7_CAN0 = ID_MASK7_CAN0;&lt;BR /&gt;//MSCAN_CANCTL0 |=(0x40);&lt;BR /&gt;/* Exit to Initial mode. */&lt;BR /&gt;REG_CANCTL0_CAN0 &amp;amp;= NORMALMODE_CAN0;&lt;/P&gt;&lt;P&gt;while(MSCAN_CANCTL1 &amp;amp; 0x01)&lt;BR /&gt;{&lt;BR /&gt;/* Wait for init exit. */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Control mode register. */&lt;BR /&gt;REG_CANCTL0_CAN0 = CANCTL0_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the interrupt TX and RX register. */&lt;BR /&gt;#if (ERROR_INDICATION_CAN0 == CAN_TRUE) &lt;BR /&gt;REG_CANRIER_CAN0 = RXFIE_CAN0|OVRIE_CAN0|TSTATE0_CAN0|TSTATE1_CAN0|RSTATE0_CAN0|RSTATE1_CAN0|&lt;BR /&gt;CSCIE_CAN0|WUPIE_CAN0;&lt;BR /&gt;#else&lt;BR /&gt;REG_CANRIER_CAN0 = RXFIE_CAN0;&lt;BR /&gt;#endif&lt;BR /&gt;REG_CANTIER_CAN0 = TXEIE_DISABLE_CAN0;&lt;/P&gt;&lt;P&gt;}&lt;BR /&gt;void MSCAN_ModuleEn(void)&lt;BR /&gt;{&lt;BR /&gt;/*Enable MSCAN Module*/&lt;BR /&gt;SIM_PINSEL1 &amp;amp;= (uint32_t)~(uint32_t)(SIM_PINSEL1_MSCANPS_MASK);/* SIM_PINSEL1: MSCANPS=0 */&lt;BR /&gt;SIM_SCGC |=(uint32_t)(SIM_SCGC_MSCAN_MASK);/* SIM_SCGC: MSCAN=1 */&lt;BR /&gt;/* NVIC_ICER: CLRENA31=0,CLRENA30=0,CLRENA29=0,CLRENA28=0,CLRENA27=0,CLRENA26=0,CLRENA25=0,CLRENA24=0,CLRENA23=0,CLRENA22=0,CLRENA21=0,CLRENA20=0,CLRENA19=0,CLRENA18=0,CLRENA17=0,CLRENA16=0,CLRENA15=0,CLRENA14=0,CLRENA13=0,CLRENA12=0,CLRENA11=0,CLRENA10=0,CLRENA9=0,CLRENA8=0,CLRENA7=0,CLRENA6=0,CLRENA5=0,CLRENA4=0,CLRENA3=0,CLRENA2=0,CLRENA1=0,CLRENA0=0 */&lt;/P&gt;&lt;P&gt;//NVIC-&amp;gt;ICER[0] = 0x00U;&lt;BR /&gt;/* NVIC_IPR7: PRI_31=1,PRI_30=1 */&lt;BR /&gt;NVIC_SetPriority(MSCAN_RX_IRQn, 1);&lt;BR /&gt;NVIC_SetPriority(MSCAN_TX_IRQn, 1);&lt;/P&gt;&lt;P&gt;/* NVIC_ISER: SETENA31=1,SETENA30=1,SETENA29=0,SETENA28=0,SETENA27=0,SETENA26=0,SETENA25=0,SETENA24=0,SETENA23=0,SETENA22=0,SETENA21=0,SETENA20=0,SETENA19=0,SETENA18=0,SETENA17=0,SETENA16=0,SETENA15=0,SETENA14=0,SETENA13=0,SETENA12=0,SETENA11=0,SETENA10=0,SETENA9=0,SETENA8=0,SETENA7=0,SETENA6=0,SETENA5=0,SETENA4=0,SETENA3=0,SETENA2=0,SETENA1=0,SETENA0=0 */&lt;BR /&gt;NVIC_EnableIRQ(MSCAN_RX_IRQn);&lt;BR /&gt;NVIC_EnableIRQ(MSCAN_TX_IRQn);&lt;BR /&gt;// __asm("CPSIE i");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Here is my MAIN function:&lt;BR /&gt;Clk_Init();&lt;BR /&gt;MSCAN_ModuleEn();&lt;BR /&gt;Can_Init(CAN_BAUDRATE_500K);&lt;BR /&gt;while(1)&lt;BR /&gt;{&lt;BR /&gt;Can_Transmit(0x18123456, 8, (uint8_t *)"ABCDEFGH", CAN_EXTENDED);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;I have attached Source files also along with.&lt;/P&gt;&lt;P&gt;Can somebody help me to find out where the problem is?&lt;/P&gt;&lt;P&gt;Thanks and regards,&lt;BR /&gt;Manjunath&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-337340"&gt;CAN_impl.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 27 Mar 2017 14:19:39 GMT</pubDate>
    <dc:creator>manjunathkm</dc:creator>
    <dc:date>2017-03-27T14:19:39Z</dc:date>
    <item>
      <title>KEA128 CAN driver problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KEA128-CAN-driver-problem/m-p/623159#M37295</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am working on CAN driver for KEA128 microcontroller. I have referred some of the sample code and prepared CAN driver.&lt;BR /&gt;But I am not able make it work. I am not able to see pulses on the TX pin of the controller on the uC.&lt;/P&gt;&lt;P&gt;Below is CLK code to obtain 48MHZ:&lt;BR /&gt;ICS_C1 = (1 &amp;lt;&amp;lt; ICS_C1_IREFSTEN_SHIFT)&lt;BR /&gt;| ICS_C1_CLKS(0)&lt;BR /&gt;| (1 &amp;lt;&amp;lt; ICS_C1_IRCLKEN_SHIFT);&lt;BR /&gt;while (!(ICS_S &amp;amp; ICS_S_LOCK_MASK)); // wait for FLL to lock&lt;BR /&gt;SIM_CLKDIV = SIM_CLKDIV_OUTDIV1(0)&lt;BR /&gt;| (1 &amp;lt;&amp;lt; SIM_CLKDIV_OUTDIV2_SHIFT)&lt;BR /&gt;| (0 &amp;lt;&amp;lt; SIM_CLKDIV_OUTDIV3_SHIFT);&lt;BR /&gt;ICS_C2 = ICS_C2_BDIV(0);&lt;/P&gt;&lt;P&gt;Below is the CAN Init code:&lt;BR /&gt;void Can_Init(uint8 Baudrate)&lt;BR /&gt;{&lt;BR /&gt;/* Enter to Initial mode. */&lt;BR /&gt;MSCAN_CANCTL0 = INITMODE_CAN0;&lt;/P&gt;&lt;P&gt;while(REG_CANCTL1_INITAK_CAN0 == INITMODE_BIT_CAN0)&lt;BR /&gt;{&lt;BR /&gt;/* Wait for init acknowledge */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANCTL1_CAN0 = CANCTL1_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR1_CAN0 = CANBTR1_CAN0;&lt;/P&gt;&lt;P&gt;if(Baudrate == CAN_BAUDRATE_500K)&lt;BR /&gt;{&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR0_CAN0 = CANBTR0_CAN_500K;&lt;BR /&gt;Can_BaudRate_Status = CAN_BAUDRATE_500K;&lt;BR /&gt;}&lt;BR /&gt;else if(Baudrate == CAN_BAUDRATE_250K)&lt;BR /&gt;{&lt;BR /&gt;/* Set the Control Register. */&lt;BR /&gt;REG_CANBTR0_CAN0 = CANBTR0_CAN_250K;&lt;BR /&gt;Can_BaudRate_Status = CAN_BAUDRATE_250K;&lt;BR /&gt;}&lt;BR /&gt;else&lt;BR /&gt;{&lt;BR /&gt;/* No Actions Required */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Acceptance filter register. */&lt;BR /&gt;REG_CANIDAC_CAN0 = ACC_FILTER_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the Message Object Acceptance Code. */&lt;BR /&gt;REG_CANIDAR0_CAN0 = ID_CODE0_CAN0;&lt;BR /&gt;REG_CANIDAR1_CAN0 = ID_CODE1_CAN0;&lt;BR /&gt;REG_CANIDAR2_CAN0 = ID_CODE2_CAN0;&lt;BR /&gt;REG_CANIDAR3_CAN0 = ID_CODE3_CAN0;&lt;BR /&gt;REG_CANIDAR4_CAN0 = ID_CODE4_CAN0;&lt;BR /&gt;REG_CANIDAR5_CAN0 = ID_CODE5_CAN0;&lt;BR /&gt;REG_CANIDAR6_CAN0 = ID_CODE6_CAN0;&lt;BR /&gt;REG_CANIDAR7_CAN0 = ID_CODE7_CAN0;&lt;BR /&gt;/* Set the Identifier mask register */&lt;BR /&gt;REG_CANIDMR0_CAN0 = ID_MASK0_CAN0;&lt;BR /&gt;REG_CANIDMR1_CAN0 = ID_MASK1_CAN0;&lt;BR /&gt;REG_CANIDMR2_CAN0 = ID_MASK2_CAN0;&lt;BR /&gt;REG_CANIDMR3_CAN0 = ID_MASK3_CAN0;&lt;BR /&gt;REG_CANIDMR4_CAN0 = ID_MASK4_CAN0;&lt;BR /&gt;REG_CANIDMR5_CAN0 = ID_MASK5_CAN0;&lt;BR /&gt;REG_CANIDMR6_CAN0 = ID_MASK6_CAN0;&lt;BR /&gt;REG_CANIDMR7_CAN0 = ID_MASK7_CAN0;&lt;BR /&gt;//MSCAN_CANCTL0 |=(0x40);&lt;BR /&gt;/* Exit to Initial mode. */&lt;BR /&gt;REG_CANCTL0_CAN0 &amp;amp;= NORMALMODE_CAN0;&lt;/P&gt;&lt;P&gt;while(MSCAN_CANCTL1 &amp;amp; 0x01)&lt;BR /&gt;{&lt;BR /&gt;/* Wait for init exit. */&lt;BR /&gt;}&lt;BR /&gt;/* Set the Control mode register. */&lt;BR /&gt;REG_CANCTL0_CAN0 = CANCTL0_CAN0;&lt;/P&gt;&lt;P&gt;/* Set the interrupt TX and RX register. */&lt;BR /&gt;#if (ERROR_INDICATION_CAN0 == CAN_TRUE) &lt;BR /&gt;REG_CANRIER_CAN0 = RXFIE_CAN0|OVRIE_CAN0|TSTATE0_CAN0|TSTATE1_CAN0|RSTATE0_CAN0|RSTATE1_CAN0|&lt;BR /&gt;CSCIE_CAN0|WUPIE_CAN0;&lt;BR /&gt;#else&lt;BR /&gt;REG_CANRIER_CAN0 = RXFIE_CAN0;&lt;BR /&gt;#endif&lt;BR /&gt;REG_CANTIER_CAN0 = TXEIE_DISABLE_CAN0;&lt;/P&gt;&lt;P&gt;}&lt;BR /&gt;void MSCAN_ModuleEn(void)&lt;BR /&gt;{&lt;BR /&gt;/*Enable MSCAN Module*/&lt;BR /&gt;SIM_PINSEL1 &amp;amp;= (uint32_t)~(uint32_t)(SIM_PINSEL1_MSCANPS_MASK);/* SIM_PINSEL1: MSCANPS=0 */&lt;BR /&gt;SIM_SCGC |=(uint32_t)(SIM_SCGC_MSCAN_MASK);/* SIM_SCGC: MSCAN=1 */&lt;BR /&gt;/* NVIC_ICER: CLRENA31=0,CLRENA30=0,CLRENA29=0,CLRENA28=0,CLRENA27=0,CLRENA26=0,CLRENA25=0,CLRENA24=0,CLRENA23=0,CLRENA22=0,CLRENA21=0,CLRENA20=0,CLRENA19=0,CLRENA18=0,CLRENA17=0,CLRENA16=0,CLRENA15=0,CLRENA14=0,CLRENA13=0,CLRENA12=0,CLRENA11=0,CLRENA10=0,CLRENA9=0,CLRENA8=0,CLRENA7=0,CLRENA6=0,CLRENA5=0,CLRENA4=0,CLRENA3=0,CLRENA2=0,CLRENA1=0,CLRENA0=0 */&lt;/P&gt;&lt;P&gt;//NVIC-&amp;gt;ICER[0] = 0x00U;&lt;BR /&gt;/* NVIC_IPR7: PRI_31=1,PRI_30=1 */&lt;BR /&gt;NVIC_SetPriority(MSCAN_RX_IRQn, 1);&lt;BR /&gt;NVIC_SetPriority(MSCAN_TX_IRQn, 1);&lt;/P&gt;&lt;P&gt;/* NVIC_ISER: SETENA31=1,SETENA30=1,SETENA29=0,SETENA28=0,SETENA27=0,SETENA26=0,SETENA25=0,SETENA24=0,SETENA23=0,SETENA22=0,SETENA21=0,SETENA20=0,SETENA19=0,SETENA18=0,SETENA17=0,SETENA16=0,SETENA15=0,SETENA14=0,SETENA13=0,SETENA12=0,SETENA11=0,SETENA10=0,SETENA9=0,SETENA8=0,SETENA7=0,SETENA6=0,SETENA5=0,SETENA4=0,SETENA3=0,SETENA2=0,SETENA1=0,SETENA0=0 */&lt;BR /&gt;NVIC_EnableIRQ(MSCAN_RX_IRQn);&lt;BR /&gt;NVIC_EnableIRQ(MSCAN_TX_IRQn);&lt;BR /&gt;// __asm("CPSIE i");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Here is my MAIN function:&lt;BR /&gt;Clk_Init();&lt;BR /&gt;MSCAN_ModuleEn();&lt;BR /&gt;Can_Init(CAN_BAUDRATE_500K);&lt;BR /&gt;while(1)&lt;BR /&gt;{&lt;BR /&gt;Can_Transmit(0x18123456, 8, (uint8_t *)"ABCDEFGH", CAN_EXTENDED);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;I have attached Source files also along with.&lt;/P&gt;&lt;P&gt;Can somebody help me to find out where the problem is?&lt;/P&gt;&lt;P&gt;Thanks and regards,&lt;BR /&gt;Manjunath&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-337340"&gt;CAN_impl.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Mar 2017 14:19:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KEA128-CAN-driver-problem/m-p/623159#M37295</guid>
      <dc:creator>manjunathkm</dc:creator>
      <dc:date>2017-03-27T14:19:39Z</dc:date>
    </item>
  </channel>
</rss>

