<?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: Problems with Port definition...CAN Module...Cosmic Compiler</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217942#M9115</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;This is not C:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;#define _IO(x) @(_BASE)+(x)&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Try&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;#define _IO(x) (*(volatile char*)(_BASE + x))&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 21 Jan 2009 20:01:00 GMT</pubDate>
    <dc:creator>kef</dc:creator>
    <dc:date>2009-01-21T20:01:00Z</dc:date>
    <item>
      <title>Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217941#M9114</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;SPAN&gt;hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I just write a function for initialization of the CAN modules of a HCS12 using cosmic compiler version 4.4.6. Now I have the following problem. I pass the number of the CAN module which should be initialized to a function. The number of the CAN module is stored in the variable CANm;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I defined CAN0 in iosdp256.h:&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#define CAN0 0x0140;&lt;/PRE&gt;&lt;/DIV&gt;Then I defined the following in iosdp256.h:&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#define CANCTL0&amp;nbsp;&amp;nbsp; 0X00&amp;nbsp;&amp;nbsp; 
#define CANCTL1&amp;nbsp;&amp;nbsp; 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;&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; 
#define CANBTR0&amp;nbsp;&amp;nbsp; 0X02&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#define CANBTR1&amp;nbsp;&amp;nbsp; 0X03&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#define CANRFLG&amp;nbsp;&amp;nbsp; 0X04&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANRIER&amp;nbsp;&amp;nbsp; 0X05&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANTFLG&amp;nbsp;&amp;nbsp; 0X06&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANTIER&amp;nbsp;&amp;nbsp; 0X07&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANTBSEL&amp;nbsp; 0X0A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#define CANIDAC&amp;nbsp;&amp;nbsp; 0x0B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#define CANIDAR0&amp;nbsp; 0x10&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR1&amp;nbsp; 0x11&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR2&amp;nbsp; 0x12&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR3&amp;nbsp; 0x13&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR0&amp;nbsp; 0x14&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR1&amp;nbsp; 0x15&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR2&amp;nbsp; 0x16&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR3&amp;nbsp; 0x17&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR4&amp;nbsp; 0x18&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR5&amp;nbsp; 0x19&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR6&amp;nbsp; 0x1A&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDAR7&amp;nbsp; 0x1B&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR4&amp;nbsp; 0x1C&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR5&amp;nbsp; 0x1D&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR6&amp;nbsp; 0x1E&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANIDMR7&amp;nbsp; 0x1F &lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;I want to call a function like&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;CANInit(CAN0);&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;To enable the CAN module CAN0 I wanted to use&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;_IO(CANm + CANCTL1) |= 0x80;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;because in iosdp256.h is defined&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#ifndef _BASE#define _BASE 0#endif#define _IO(x) @(_BASE)+(x)&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;SPAN&gt;But I always get the error message "bad space modifier" and "invalid lvalue" for the lines with&amp;nbsp; _IO(.......)|=... .&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here once again more clear:&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;iosdp256.h&amp;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; /* contains register definitions */
&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;&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;&amp;nbsp; /* for the 9S12DP256&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
void CANInit(unsigend char CANm)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; _IO(CANModule + CANCTL0) |= 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enter Initialization-Mode
&amp;nbsp;&amp;nbsp;&amp;nbsp; _IO(CANm + CANCTL1) |= 0x80;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable CAN module CAN0
}

CANInit(CAN0);&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;SPAN&gt;Could someone tell me what is wrong or how I can solve the problem?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards&lt;/SPAN&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jan 2009 19:32:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217941#M9114</guid>
      <dc:creator>Piete</dc:creator>
      <dc:date>2009-01-21T19:32:15Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217942#M9115</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;This is not C:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;#define _IO(x) @(_BASE)+(x)&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Try&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;#define _IO(x) (*(volatile char*)(_BASE + x))&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jan 2009 20:01:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217942#M9115</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2009-01-21T20:01:00Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217943#M9116</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;that&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; #define _IO(x) (*(volatile char*)(_BASE + x))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;does not work.&lt;BR /&gt;&lt;BR /&gt;If I use this I get a lot of errors in the iosdp256.h.&lt;BR /&gt;&lt;BR /&gt;It is also defined.....&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;volatile __uchar CAN0CTL0     _IO(0x140);  /* CAN0 control register 0 */volatile __uchar CAN0CTL1     _IO(0x141);  /* CAN0 control register 1 */volatile __uchar CAN0BTR0     _IO(0x142);  /* CAN0 bus timing register 0 */
......
....
...
..
.
&lt;/PRE&gt;&lt;/DIV&gt;in the iosdp256.h.&lt;BR /&gt;&lt;BR /&gt;If I use the following:&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;void CANInit(void){    CAN0CTL0 = 0x01;          // Enter Initialization Mode    CAN0CTL1 = 0x80;           // CANE = 1 THE MSCAN module is enabled}

CANInit();
&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;it works, but then I can not pass the module I want to initialize. I have hard coded the module which should be initialize.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jan 2009 20:41:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217943#M9116</guid>
      <dc:creator>Piete</dc:creator>
      <dc:date>2009-01-21T20:41:54Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217944#M9117</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Of course it won't work this way:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;volatile __uchar CAN0CTL0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IO(0x140);&amp;nbsp; /* CAN0 control register 0 */&lt;BR /&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;But this should work&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define CAN0CTL0 _IO(0x140)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Not sure what you mean by "can't pass the module". Is it something like this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define CANCTL0(base) _IO(base+0)&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;#define CANCTL1(base) _IO(base+1)&lt;/DIV&gt;&lt;DIV&gt;...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define CAN0 &amp;amp;CAN0CTL0&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;#define CAN1 &amp;amp;CAN1CTL0&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;#define CAN2 &amp;amp;CAN2CTL0&lt;/DIV&gt;&lt;DIV&gt;...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;and then&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; CANCTL1(CAN0) = 55;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; CANCTL1(CAN2) = 55;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;?&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jan 2009 22:25:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217944#M9117</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2009-01-21T22:25:43Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217945#M9118</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;it is something like that:&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANCTL0(base) _IO(base+0)&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANCTL1(base) _IO(base+1)&lt;BR /&gt;&lt;BR /&gt;Normally you use for example&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; // Enter Initialization Mode&lt;BR /&gt;&lt;BR /&gt;CAN module 0; control register 0;set bit 0 to 1 to enter initialization Mode&lt;BR /&gt;But if I use this I have to hard code the initialization of the CAN module.&lt;BR /&gt;&lt;BR /&gt;In iosdp256.h it is defined:&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#define _BASE    0
#endif#define _IO(x)    @(_BASE)+(x)volatile __uchar CAN0CTL0     _IO(0x140);  /* CAN0 control register 0 */&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;Now I want to write a function for all CAN modules so that I only have to call a function, e.g. CANInit and pass the number of the CAN module which should be initialized.&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g. CANInit(CAN0);&lt;BR /&gt;&lt;BR /&gt;So I definded additionally&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#define CAN0      0x0140  // First address for MSCAN0  #define CANCTL0   0X00    // Control register 0&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;Then I wanted to use it like that:&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;CANInit(CAN0);// CANInit(0x140};

CANInit(CANm)
{
    _IO(CANm+CANCTL0) |= 0x01; //_IO(0x140+0x00) |= 0x01;
}
&lt;/PRE&gt;&lt;/DIV&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;That does not work.&lt;BR /&gt;&lt;BR /&gt;I tried to use:&lt;BR /&gt;&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;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#define CANCTL0(base) _IO(0x00+base);   // in iosdp256.hCANInit(CAN0);   //CANInit(0x140);

CANInit(CANm){    CANCTL0(CANm) |= 0x01;    //CANCTL0(0x140);
}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;But then I get the error "bad space modifier" in the line of "CANCTL0(CANm) |= 0x01;"&lt;BR /&gt;&lt;BR /&gt;The error means:&lt;BR /&gt;&lt;BR /&gt;"bad space modifier - a modifier beginning with a @ character is not&lt;BR /&gt;followed by an identifier"&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;If I use&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile __uchar CANCTL0(base) _IO(0x00+base);&lt;BR /&gt;&lt;BR /&gt;instead of&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CANCTL0(base) _IO(0x00+base);&lt;/DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;But then I get the error " base undefinded"&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&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;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jan 2009 23:33:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217945#M9118</guid>
      <dc:creator>Piete</dc:creator>
      <dc:date>2009-01-21T23:33:48Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217946#M9119</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Naturally you have to define "base" to the CAN0 offset.&lt;BR /&gt;&lt;BR /&gt;Let me save you some headache and post my own code for this:&lt;BR /&gt;&lt;BR /&gt;&lt;PRE&gt;typedef volatile unsigned char* CAN_port;

#define CAN0 (&amp;amp;CAN0CTL0)
#define CAN1 (&amp;amp;CAN1CTL0)
#define CAN2 (&amp;amp;CAN2CTL0)
#define CAN3 (&amp;amp;CAN3CTL0)
#define CAN4 (&amp;amp;CAN4CTL0)

#define reg_CANCTL0(x)  (*((CAN_port)x + 0x00))   /* Control Register 0                      */
#define reg_CANCTL1(x)  (*((CAN_port)x + 0x01))   /* Control Register 1                      */
#define reg_CANBTR0(x)  (*((CAN_port)x + 0x02))   /* Bus Timing Register 0                   */
#define reg_CANBTR1(x)  (*((CAN_port)x + 0x03))   /* Bus Timing Register 1                   */
#define reg_CANRFLG(x)  (*((CAN_port)x + 0x04))   /* Receiver Flag Register                  */
#define reg_CANRIER(x)  (*((CAN_port)x + 0x05))   /* Receiver Interrupt Enable Register      */
#define reg_CANTFLG(x)  (*((CAN_port)x + 0x06))   /* Transmitter Flag Register               */
#define reg_CANTIER(x)  (*((CAN_port)x + 0x07))   /* Transmitter Interrupt Enable Register   */
#define reg_CANTARQ(x)  (*((CAN_port)x + 0x08))   /* Transmitter Message Abort Control       */
#define reg_CANTAAK(x)  (*((CAN_port)x + 0x09))   /* Transmitter Message Abort Control       */
#define reg_CANTBSEL(x) (*((CAN_port)x + 0x0A))   /* Transmit Buffer Selection               */
#define reg_CANIDAC(x)  (*((CAN_port)x + 0x0B))   /* Identifier Acceptance Control Register  */
#define reg_CANRXERR(x) (*((CAN_port)x + 0x0E))   /* Receive Error Counter Register          */
#define reg_CANTXERR(x) (*((CAN_port)x + 0x0F))   /* Transmit Error Counter Register         */
#define reg_CANIDAR0(x) (*((CAN_port)x + 0x10))   /* Identifier Acceptance Register 0        */
#define reg_CANIDAR1(x) (*((CAN_port)x + 0x11))   /* Identifier Acceptance Register 1        */
#define reg_CANIDAR2(x) (*((CAN_port)x + 0x12))   /* Identifier Acceptance Register 2        */
#define reg_CANIDAR3(x) (*((CAN_port)x + 0x13))   /* Identifier Acceptance Register 3        */
#define reg_CANIDMR0(x) (*((CAN_port)x + 0x14))   /* Identifier Mask Register 0              */
#define reg_CANIDMR1(x) (*((CAN_port)x + 0x15))   /* Identifier Mask Register 1              */
#define reg_CANIDMR2(x) (*((CAN_port)x + 0x16))   /* Identifier Mask Register 2              */
#define reg_CANIDMR3(x) (*((CAN_port)x + 0x17))   /* Identifier Mask Register 3              */
#define reg_CANIDAR4(x) (*((CAN_port)x + 0x18))   /* Identifier Acceptance Register 4        */
#define reg_CANIDAR5(x) (*((CAN_port)x + 0x19))   /* Identifier Acceptance Register 5        */
#define reg_CANIDAR6(x) (*((CAN_port)x + 0x1A))   /* Identifier Acceptance Register 6        */
#define reg_CANIDAR7(x) (*((CAN_port)x + 0x1B))   /* Identifier Acceptance Register 7        */
#define reg_CANIDMR4(x) (*((CAN_port)x + 0x1C))   /* Identifier Mask Register 4              */
#define reg_CANIDMR5(x) (*((CAN_port)x + 0x1D))   /* Identifier Mask Register 5              */
#define reg_CANIDMR6(x) (*((CAN_port)x + 0x1E))   /* Identifier Mask Register 6              */
#define reg_CANIDMR7(x) (*((CAN_port)x + 0x1F))   /* Identifier Mask Register 7              */
#define reg_CANRXFG(x)  (  (CAN_port)x + 0x20 )   /* Foreground Receive Buffer               */
#define reg_CANTXFG(x)  (  (CAN_port)x + 0x30 )   /* Foreground Transmit Buffer              */
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Now you can use the registers as if they were variables, like this:&lt;BR /&gt;&lt;BR /&gt;reg_CANCTL0(CAN0) |= ...&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;The code will work on any ISO C compiler.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Jan 2009 16:01:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217946#M9119</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2009-01-23T16:01:02Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217947#M9120</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I tried to use the code but it seems not to work.&lt;BR /&gt;&lt;BR /&gt;The attachment files are can.h and can.c. Perhaps someone can have look at the code. I can not find the mistake. The code stopps at&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;char CANInitMode(unsigned char CANModule){    reg_CANCTL0(CANModule) |= 0x01;                 while( !CANTestInitStatus(CANModule) ); &amp;lt;- it stopps here     return 0;        }

char CANTestInitStatus(unsigned char CANModule)
{
    return reg_CANCTL1(CANModule) &amp;amp; 0x01; 
}
&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;I start the initialization with&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;   stCANInit.CSWAI= 0;     // Low power / normal in wait mode (1/0)   stCANInit.TIME= 0;      // Timer for time-stamp enable/disable (1/0)   stCANInit.CANE= 1;      // Enable MSCAN!   stCANInit.CLKsrc=0;    // Clock source: bus/oscillator (1/0)   stCANInit.LOOPB= 0;     // Loop back Mode for test (ja=1/nein=0)   stCANInit.LISTEN= 0;    // MSCAN is listen only (ja=1/nein=0)   stCANInit.WUPM= 0;      // Low Pas filter for wake up (ja=1/nein=0)      CANInit(500, stCANInit, CAN_MODULE); // Defined in can.h as CAN0&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Jan 2009 21:32:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217947#M9120</guid>
      <dc:creator>Piete</dc:creator>
      <dc:date>2009-01-23T21:32:58Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217948#M9121</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Sorry for the late reply.&lt;BR /&gt;&lt;BR /&gt;First of all, the CANE bit is one of the notorious "write-once" bits. This means that in normal single chip mode (without debugger attached), you can only write to it once, and after that the value written stays. This might cause various unintended errors.&lt;BR /&gt;&lt;BR /&gt;Also, are you sure that the line setting INITAK in CANCTL0 is executed? I can't find any errors in your code, though I only looked through it briefly. &lt;BR /&gt;&lt;BR /&gt;The line setting CANCTL1 looks rather fishy. I would disassemble that one and see what it actually does.&lt;BR /&gt;&lt;BR /&gt;I know that the MSCAN initialization is a bit delicate: I always put the module in sleep mode before initializing it. I think this was advised in some Freescale errata to avoid problems in case the init code is called more than once in a program.&lt;BR /&gt;&lt;BR /&gt;Here is how I do it:&lt;BR /&gt;&lt;BR /&gt;&lt;PRE&gt;  reg_CANCTL0(port) |= SLPRQ;                    /* sleep mode */
  reg_CANCTL0(port) |= INITRQ;                   /* init mode  */

    while((reg_CANCTL1(port) &amp;amp; SLPAK)==0)        /* wait until CPU enters sleep mode. */
    {
      ;
    }
   
   
    reg_CANCTL1(port) |= CLKSRC;                 /* clksrc=bus */

    /* set baudrate, filters &amp;amp; acceptance  registers etc... */

  reg_CANCTL0(port) &amp;amp;= ~SLPRQ;                   /* leave sleep mode   */
  reg_CANCTL0(port) &amp;amp;= ~INITRQ;                  /* leave init mode    */

  if(useRxInterrupt)                             /* if the interrupts are used */
  {
    reg_CANRIER(port) = RXFIE;
  }


  while ((reg_CANCTL1(port) &amp;amp; (SLPAK|INITAK)) &amp;gt; 0) /* wait until CAN is running */
  {
    ;
  }

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Feb 2009 00:12:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217948#M9121</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2009-02-03T00:12:29Z</dc:date>
    </item>
    <item>
      <title>Re: Problems with Port definition...CAN Module...Cosmic Compiler</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217949#M9122</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thank you for your help. I changed a few things but it still does not work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The attachment files are my new can.h and can.c. It still does not work. the programm stopps here:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;
while((reg_CANCTL1(CANModule) &amp;amp; 0x02)==0)    &amp;lt;-- stops here        {    }&lt;/PRE&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;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;I starts with: CANInit(500, CAN0);.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The value of CANModule in CANinit is 64dec 0x40hex. Is this right? I think it has to be 0x140!?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can not find the mistake....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Feb 2009 20:12:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Problems-with-Port-definition-CAN-Module-Cosmic-Compiler/m-p/217949#M9122</guid>
      <dc:creator>Piete</dc:creator>
      <dc:date>2009-02-27T20:12:24Z</dc:date>
    </item>
  </channel>
</rss>

