<?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のトピックRe: write once register issue</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209611#M8647</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,Dear Kef&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I has still difficulty about it.&amp;nbsp;Perhaps my comprehend is wrong.So please give me hand.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;I think the CAN initialization&amp;nbsp;code will&amp;nbsp;been&amp;nbsp;run again though reset.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here is my detailed infromation:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Afrer power on,bootloader runs firstly,it will initialize CAN,and it waits the command from HOST PC.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If get nothing in 500ms,it will jump to application.And at this time,application will initalize CAN again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If get the program the flash command from HOST PC in 500ms,it will communicate with HOST PC and program the flash.When it finish,it will Reset.But after reset,MCU still run bootloader&amp;nbsp; initialization CAN code,and then jump to application,application will initialize the CAN again.Because bootloader CAN initialization code and&amp;nbsp;application CAN initialization code are&amp;nbsp;&lt;FONT color="#ff0000"&gt;two different code,&lt;/FONT&gt;&lt;FONT color="#888888"&gt;two alone code.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If&amp;nbsp;CAN init is&amp;nbsp;only one code,it will been okay through reset.But based on&amp;nbsp;my&amp;nbsp;code,it is a little difficult for me to&amp;nbsp;use only one initialization CAN code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Any advice is welcome.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 30 Jun 2010 13:44:10 GMT</pubDate>
    <dc:creator>100asong</dc:creator>
    <dc:date>2010-06-30T13:44:10Z</dc:date>
    <item>
      <title>write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209607#M8643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,Dear All&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; My cpu is MC9S12XEP100.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLKSEL &amp;amp;= ~0xFC;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear CLKSEL Register&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This sentence&amp;nbsp; write bit CLKSEL_COPWAI,this means that I can't write CLKSEL_COPWAI again since it is write once register in Normal Mode.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Whether I can use&amp;nbsp;"&amp;nbsp;CLKSEL = 0x00" sentence in the subsequent code?It will affect CLKSEL_COPWAI?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jun 2010 17:32:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209607#M8643</guid>
      <dc:creator>100asong</dc:creator>
      <dc:date>2010-06-29T17:32:10Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209608#M8644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Write once is triggered by any write to register. In particular register you can't write only&amp;nbsp;bits you want, you write them all at once. Even BRSET and&amp;nbsp;BRCLR instructions write access whole registers, not single or couple of bits you want, but always all 8 bits.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jun 2010 18:35:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209608#M8644</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2010-06-29T18:35:23Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209609#M8645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Kef,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thanks for reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I write bootloader code meet this thing:Bootloader uses can and application uses also&amp;nbsp;CAN.So CAN0CTL1_CANE need to been set at bootloader part and application part.MCU runs&amp;nbsp; Bootloader and&amp;nbsp;then run App.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In BDM mode,it will okay.But in NS,it will occur some issue since CAN0CTL1_CANE is write once register.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; How to slove it?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Please give me some advice.Thanks a million.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jun 2010 07:43:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209609#M8645</guid>
      <dc:creator>100asong</dc:creator>
      <dc:date>2010-06-30T07:43:08Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209610#M8646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't think CANE set in bootloader is a big issue, at least I don't know how.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Solution is simple and I think you already know it: reset.&amp;nbsp;Reset&amp;nbsp;when switching from application to bootloader.&amp;nbsp;&amp;nbsp;To switch back to application - reset&amp;nbsp;after bootload session is done.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jun 2010 13:03:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209610#M8646</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2010-06-30T13:03:15Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209611#M8647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,Dear Kef&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I has still difficulty about it.&amp;nbsp;Perhaps my comprehend is wrong.So please give me hand.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;I think the CAN initialization&amp;nbsp;code will&amp;nbsp;been&amp;nbsp;run again though reset.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here is my detailed infromation:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Afrer power on,bootloader runs firstly,it will initialize CAN,and it waits the command from HOST PC.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If get nothing in 500ms,it will jump to application.And at this time,application will initalize CAN again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If get the program the flash command from HOST PC in 500ms,it will communicate with HOST PC and program the flash.When it finish,it will Reset.But after reset,MCU still run bootloader&amp;nbsp; initialization CAN code,and then jump to application,application will initialize the CAN again.Because bootloader CAN initialization code and&amp;nbsp;application CAN initialization code are&amp;nbsp;&lt;FONT color="#ff0000"&gt;two different code,&lt;/FONT&gt;&lt;FONT color="#888888"&gt;two alone code.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If&amp;nbsp;CAN init is&amp;nbsp;only one code,it will been okay through reset.But based on&amp;nbsp;my&amp;nbsp;code,it is a little difficult for me to&amp;nbsp;use only one initialization CAN code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Any advice is welcome.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jun 2010 13:44:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209611#M8647</guid>
      <dc:creator>100asong</dc:creator>
      <dc:date>2010-06-30T13:44:10Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209612#M8648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think that you don't need to reset CANE bit, it can be kept set.&amp;nbsp;To be able to reinitialize CAN module you only need to switch CAN mode back to initialization mode. That's possible without any MCU reset.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Anyway you can always reset whole MCU, even&amp;nbsp;when going from bootloader to application, even if that should happen after running bootloader for 0.5s after power on.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jun 2010 17:01:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209612#M8648</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2010-06-30T17:01:03Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209613#M8649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Kef,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thanks help me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In bootloader ,address belong to 0xF000-0xFFF,can initialization code is here:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void bootloader_InitCAN0(void){&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL0 = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MSCAN in initialization mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(CAN0CTL1_INITAK));&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for initialization mode acknowledge&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; &lt;FONT color="#ff0000"&gt;CAN0CTL1_CANE = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable MSCAN module&lt;BR /&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL1_LISTEN = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Not listen only mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL1_WUPM = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL1_BORM = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR0 = 0xFD;//(byte)(BOOT_RX_ID&amp;gt;&amp;gt;3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR1 = 0x60;//(byte)((BOOT_RX_ID&amp;lt;&amp;lt;5)&amp;amp;0xE0);&amp;nbsp; // only down loader id is accepted&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR2 = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR3 = 0xFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDMR4 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDMR5 = 0x1F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDMR6 = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDMR7 = 0xFF;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR4 = 0xFD;//(byte)(BOOT_RX_ID&amp;gt;&amp;gt;3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR5 = 0x60;//(byte)((BOOT_RX_ID&amp;lt;&amp;lt;5)&amp;amp;0xE0);&amp;nbsp; // only down loader id is accepted&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR6 = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0IDAR7 = 0xFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Exit initialization mode request&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (CAN0CTL1_INITAK);&amp;nbsp; // Wait for normal mode&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0CTL0 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Exit initialization mode request&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; CAN0RIER = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable Receive interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN0TIER = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //disable send interrupt flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(CAN0CTL0_SYNCH)); // Wait for CAN synchronization&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RxMsg.DtLen = 0;&amp;nbsp;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My application code CAN initialization is here,since &lt;FONT color="#ff0000"&gt;it has some other feature and I can not use bootloader_InitCAN0 from bootloader.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;void InitCAN(u8 channelNo,u8 baudrate)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; u32 _id;&lt;BR /&gt;&amp;nbsp;volatile MSCANReg *stCanMsgReg;&lt;BR /&gt;&amp;nbsp;volatile XGCANstruct *stXGCANStruct;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;//stXGCANStruct = (volatile XGCANstruct *)(&amp;amp;ChannelCAN0);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;#ifdef&amp;nbsp; USE_CAN0&lt;BR /&gt;&amp;nbsp;if(channelNo == 0)&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; stXGCANStruct = (volatile XGCANstruct *)(&amp;amp;ChannelCAN0);&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;#endif&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;if(channelNo == 4)&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;stXGCANStruct = (volatile XGCANstruct *)(&amp;amp;ChannelCAN4);&amp;nbsp;&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;stCanMsgReg = (volatile MSCANReg *)stXGCANStruct-&amp;gt;pCAN;&amp;nbsp; //get CAN register&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;(stCanMsgReg-&amp;gt;can_ctl0).Byte= 1;//MSCAN in initialization mode;&lt;BR /&gt;&amp;nbsp;while(stCanMsgReg-&amp;gt;can_ctl1.Bits.INITAK != 1); //Initialization mode active&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;FONT color="#ff0000"&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.CANE = 1;// MSCAN module is enabled&lt;/FONT&gt;&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.LISTEN = 0;&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.WUPM = 1;&lt;BR /&gt;&amp;nbsp;#ifdef _PLL_&lt;BR /&gt;&amp;nbsp;//If we use OSC clk,set borm to 1;if we use BUS CLK,we should set CLK&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.CLKsrc=1;//assume the bus clk is 48M hz.&lt;/P&gt;&lt;P&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_btr0)-&amp;gt;Byte = 0xC0| baudrate;// SJW = 4, fcan=48M/4=12M&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_btr1)-&amp;gt;Byte = 0x6f;// SAMP = 0, TSEG2 = 7, TSEG1 = 16, 24 Tq per bit, Baud=12M/24=500K&lt;BR /&gt;&amp;nbsp;#else&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.CLKsrc=0;//MSCAN clock source is the oscillator clock.&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_btr0)-&amp;gt;Byte = 0x41;//250k&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_btr1)-&amp;gt;Byte = 0x14;// SAMP = 0, TSEG2 = 2, TSEG1 = 5, 8 Tq per bit&lt;BR /&gt;&amp;nbsp;#endif&lt;BR /&gt;&amp;nbsp;//(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.BORM = 1; //Bus-off recovery upon user request&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.BORM = 0; //Bus-off automatic recovery&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_idac)-&amp;gt;MergedBits.grpIDAM = 0b00;&amp;nbsp; //2*32bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_idmr0)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr1)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr2)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr3)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr4)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr5)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr6)-&amp;gt;Byte = 0xff;// filter acceptance/mask&lt;BR /&gt;&amp;nbsp; (&amp;amp;stCanMsgReg-&amp;gt;can_idmr7)-&amp;gt;Byte = 0xff;// filter acceptance/mask&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl0)-&amp;gt;Byte = 0x00;//clear INITRQ&lt;BR /&gt;&amp;nbsp;while((&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.INITAK != 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_ctl0)-&amp;gt;Byte = 0x00;// clear INITRQ&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_rier)-&amp;gt;Byte = 0x01;// receive interrupts&lt;BR /&gt;&amp;nbsp;(&amp;amp;stCanMsgReg-&amp;gt;can_tier)-&amp;gt;Byte = 0x00;// transmit interrupts&lt;/P&gt;&lt;P&gt;&amp;nbsp;while(stCanMsgReg-&amp;gt;can_ctl0.Bits.SYNCH != 1); // wait for MSCAN to synchronize&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;(u8*)(stXGCANStruct-&amp;gt;tx_status) = 0x00;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;They are 2 different code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.CANE is write once register.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I can delete &lt;FONT color="#ff0000"&gt;"(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.CANE = 1;// MSCAN module is enabled ",&lt;FONT color="#3366FF"&gt;but&amp;nbsp;"(&amp;amp;stCanMsgReg-&amp;gt;can_ctl1)-&amp;gt;Bits.LISTEN = 0" still operate register can_ctl1 and it affects also CANE bit,which means it write CANE second time.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&amp;nbsp;&amp;nbsp; My comprehend is&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;right here?&lt;/P&gt;&lt;P&gt;2.Since&amp;nbsp;"They are 2 different code.", I must initializate CAN moudle again in application.Here whether I have any other way?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jun 2010 18:03:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209613#M8649</guid>
      <dc:creator>100asong</dc:creator>
      <dc:date>2010-06-30T18:03:45Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209614#M8650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Write once bit doesn't mean you must do all your best&amp;nbsp;limiting write accesses to write once bit. You may write to write once bit as many times as you wish, but only first write is accepted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For exmple&lt;/P&gt;&lt;P&gt;1) default CANE bit state after reset is "0".&amp;nbsp;&lt;/P&gt;&lt;P&gt;2) First write to CAN0CTL1 with "1" in CANE bit position&amp;nbsp;succeeds. "1" is locked to CANE bit. You may confirm that reading CAN0CTL1.&lt;/P&gt;&lt;P&gt;3) Second write to CAN0CTL1 with "0" in CANE bit position doesn't succeed, because&amp;nbsp;this is second write to CAN0CTL1.&amp;nbsp;Though you write "0" to CANE, you will read CANE==1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Another example&lt;/P&gt;&lt;P&gt;1)&amp;nbsp;default CANE bit state after reset is "0".&amp;nbsp;&lt;/P&gt;&lt;P&gt;2) First write to CAN0CTL1 with CANE=0 doesn't change state of CANE bit, but&amp;nbsp;"0" is still locked to CANE.&lt;/P&gt;&lt;P&gt;3) You want to enable CAN module and write CANE=1 to CAN0CTL1, but wirte fails because CANE is already locked in CANE==0 state. You won't be able to enable CAN module in this case.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So to enable CAN you must only provide that first write to CAN0CTL1 is writing&amp;nbsp;"1" to CANE bit. You need CAN enabled, so both, bootloader and application should&amp;nbsp;not fail if CANE==1&amp;nbsp;before any of two canInit() routines.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To reconfigure CAN, you should switch from running mode to initialization mode by writing "1" to INITRQ bit. Both your CAN init routines are doing that.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Jul 2010 00:23:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209614#M8650</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2010-07-01T00:23:56Z</dc:date>
    </item>
    <item>
      <title>Re: write once register issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209615#M8651</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I see till now,Thanks help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Jul 2010 07:45:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/write-once-register-issue/m-p/209615#M8651</guid>
      <dc:creator>100asong</dc:creator>
      <dc:date>2010-07-01T07:45:04Z</dc:date>
    </item>
  </channel>
</rss>

