<?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>8-bit Microcontrollers中的主题 Re: Newbie: Problem using MC13192 on AVR AT90CAN128</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141194#M5864</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Anteoo System have a nice open source sample to use as starting point: &lt;A href="http://www.anteeo.se/zigbee.php" rel="nofollow" target="_blank"&gt;http://www.anteeo.se/zigbee.php&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've taken that code and doing some changes to implement the Packet Mode and a version not so dependant on the ISR. If anyone is interested to see that code and/or help with development, let me know.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 20 Dec 2011 20:27:32 GMT</pubDate>
    <dc:creator>GusPS</dc:creator>
    <dc:date>2011-12-20T20:27:32Z</dc:date>
    <item>
      <title>Newbie: Problem using MC13192 on AVR AT90CAN128</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141190#M5860</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am new to this forum and new to the embedded world. My sincere apologies if this is not the right place&amp;nbsp;for posting my query .&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I have one AVR AT90CAN128 MCU which drives an MC13192 radio. I want to port one application which was written for freescale HCS08 MCU using SMAC onto my AVR MCU. The following code is developed using AVR Studio 4 and WinAVR.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here in this code, i am trying to reset the transceiver and then calling one Init_MC13192() function. I have tried to port the MC13192Init(), the one mentioned in MC13192_hw_config.c.&lt;/DIV&gt;&lt;DIV&gt;After doing that i am trying to send one register address with read access to read the contents of that register like&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp; SPI_DATA_REGISTER = reg_address;&amp;nbsp;&amp;nbsp; /* place register address on MOSI*/&lt;BR /&gt;&amp;nbsp; while(!(SPSR &amp;amp;(1&amp;lt;&amp;lt;SPIF));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for transmission to complete */&lt;BR /&gt;&amp;nbsp; receive_data = SPI_DATA_REGISTER;&amp;nbsp; /* Read the SPI data register to obtain received data*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;I have to call the above routine three times to obtain the contents of the corresponding register. Am i missing something? I am not able to receive anything from transceiver side.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include&amp;lt;avr/io.h&amp;gt;&lt;BR /&gt;#include&amp;lt;inttypes.h&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;#define F_CPU 16000000L&amp;nbsp;&amp;nbsp; /* MCU Clock Speed */&lt;BR /&gt;#define SPI_PORT PORTB&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Define SPI port */&lt;BR /&gt;#define SS PB0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The SPI Slave Select Bit */&lt;/DIV&gt;&lt;DIV&gt;unsigned char Rx_SPI[2];&lt;BR /&gt;uint16_t delay_count;&lt;BR /&gt;uint8_t temp;&lt;/DIV&gt;&lt;DIV&gt;void delay(uint8_t ms)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; uint16_t cnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm volatile (&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "\n"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "L_dl1%=:" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "mov %A0, %A2" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "mov %B0, %B2" "\n"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "L_dl2%=:" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "sbiw %A0, 1" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "brne L_dl2%=" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "dec %1" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "brne L_dl1%=" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; : "=&amp;amp;w" (cnt)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; : "r" (ms), "r" (delay_count)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void ZB_Reset()&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRD&amp;nbsp; |= (1 &amp;lt;&amp;lt; DDD7) | (1 &amp;lt;&amp;lt; DDD1) ; //Set Direction register as output&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PORTD = (0 &amp;lt;&amp;lt; PD7); //Resetting the ZB chip by pulling low RST pin&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;delay(10);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PORTD = (1 &amp;lt;&amp;lt; PD7); //Set to normal mode ZB chip to pulling high&lt;BR /&gt;&amp;nbsp;delay(25);&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;void SPI_MasterInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; /* Set MISO MOSI and SCK output, all others input */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DDRB |= (0&amp;lt;&amp;lt;DDB3)|(1&amp;lt;&amp;lt;DDB2)|(1&amp;lt;&amp;lt;DDB1)|(1&amp;lt;&amp;lt;DDB0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; /* Enable SPI, Master, set clock rate fck/16 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPCR = (1&amp;lt;&amp;lt;SPE)|(1&amp;lt;&amp;lt;MSTR)|(1&amp;lt;&amp;lt;SPR0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;uint8_t SPI_SingularTransaction(uint8_t data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; SPDR = data;&lt;BR /&gt;&amp;nbsp; while(!(SPSR &amp;amp;(1&amp;lt;&amp;lt;SPIF)));&lt;BR /&gt;&amp;nbsp; return SPDR;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void SPIDrvWrite(uint8_t reg_address, uint16_t reg_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; uint8_t reg_data_high = reg_data &amp;gt;&amp;gt; 8;&lt;BR /&gt;&amp;nbsp; uint8_t reg_data_low = reg_data;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; SPI_PORT = (1&amp;lt;&amp;lt;SS); /* Pull the slave select line low to start the transmission */&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp; /* 3 SPI Bursts for one transaction */&lt;BR /&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_address);&lt;BR /&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_data_high);&lt;BR /&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_data_low);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; SPI_PORT = (0&amp;lt;&amp;lt;SS); /* Pull the slave select line high to end the transaction */&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void SPIDrvRead(uint8_t reg_address)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; reg_address |= 0x80;&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; /* set MSB to&amp;nbsp;1 for read access*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; SPI_PORT = (1&amp;lt;&amp;lt;SS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_address);&lt;BR /&gt;&amp;nbsp; Rx_SPI[0] = SPI_SingularTransaction(0xFF);&amp;nbsp;&amp;nbsp; /* Read the received 16 bit data in Rx_SPI */&lt;BR /&gt;&amp;nbsp; Rx_SPI[1] = SPI_SingularTransaction(0xFF);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI_PORT = (0&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void Init_MC13192()&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x11,0x80FF);&amp;nbsp;&amp;nbsp; /* Eliminate Unlock Conditions due to L01 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x1B,0x8000);&amp;nbsp;&amp;nbsp; /* Disable TC1. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x1D,0x8000);&amp;nbsp;&amp;nbsp; /* Disable TC2. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x1F,0x8000);&amp;nbsp;&amp;nbsp; /* Disable TC3. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x21,0x8000);&amp;nbsp;&amp;nbsp; /* Disable TC4. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x07,0x0E00);&amp;nbsp;&amp;nbsp; /* Enable CLKo in Doze */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x0C,0x0300);&amp;nbsp;&amp;nbsp; /* IRQ pull-up disable. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x25);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Sets the reset indicator bit */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x04,0xA08D);&amp;nbsp;&amp;nbsp; /* New cal value */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x08,0xFFF7);&amp;nbsp;&amp;nbsp; /* Preferred injection */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x05,0x8351);&amp;nbsp;&amp;nbsp; /* Acoma, TC1, Doze, ATTN masks, LO1, CRC */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvWrite(0x06,0x4720);&amp;nbsp;&amp;nbsp; /* CCA, TX, RX, energy detect */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read the status register to clear any undesired IRQs. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x24);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear the status register, if set */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //gu8RTxMode = IDLE_MODE;&amp;nbsp;&amp;nbsp; /* Update global to reflect MC13192 status */&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;void main()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t reg;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay_count = F_CPU/4000;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg = 0x30;&amp;nbsp;&amp;nbsp;/* BER_Enable register. The default register value after reset is 0x0004*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZB_Reset();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_MasterInit(); /*Initialize the MCU SPI port*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Init_MC13192();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; SPIDrvRead(reg);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;asm volatile ("nop" : : );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jul 2007 18:17:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141190#M5860</guid>
      <dc:creator>Ravs</dc:creator>
      <dc:date>2007-07-25T18:17:04Z</dc:date>
    </item>
    <item>
      <title>Re: Newbie: Problem using MC13192 on AVR AT90CAN128</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141191#M5861</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void SPIDrvRead(uint8_t reg_address)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; reg_address |= 0x80;&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; /* set MSB to&amp;nbsp;1 for read access*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; SPI_PORT = (1&amp;lt;&amp;lt;SS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_address);&lt;BR /&gt;&amp;nbsp; Rx_SPI[0] = SPI_SingularTransaction(0xFF);&amp;nbsp;&amp;nbsp; /* Read the received 16 bit data in Rx_SPI */&lt;BR /&gt;&amp;nbsp; Rx_SPI[1] = SPI_SingularTransaction(0xFF);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI_PORT = (0&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;BR /&gt;This won't work.&lt;BR /&gt;First to select device as a slave You have to put Slave Select pin LOW not HIGH.&lt;BR /&gt;Second SPI_PORT = (1&amp;lt;&amp;lt;SS); sets all pins on PORTB LOW and SS pin HIGH.&lt;BR /&gt;The function should look more like this&lt;BR /&gt;&lt;DIV&gt;&lt;BR /&gt;void SPIDrvRead(uint8_t reg_address)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; reg_address |= 0x80;&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; /* set MSB to&amp;nbsp;1 for read access*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; SPI_PORT &amp;amp;= ~(1&amp;lt;&amp;lt;SS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; temp = SPI_SingularTransaction(reg_address);&lt;BR /&gt;&amp;nbsp; Rx_SPI[0] = SPI_SingularTransaction(0xFF);&amp;nbsp;&amp;nbsp; /* Read the received 16 bit data in Rx_SPI */&lt;BR /&gt;&amp;nbsp; Rx_SPI[1] = SPI_SingularTransaction(0xFF);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI_PORT |= (1&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;BR /&gt;Notice that to set bit in some register ( lets sai PA2 in PORTA ) you hawe to write&lt;BR /&gt;PORTA |= (1&amp;lt;&amp;lt;PA2) if You dont want to chainge any other bits in that register. To clear bit Yoy hawe to use PORTA &amp;amp;=~(1&amp;lt;&amp;lt;PA2) to not change other bits&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Aug 2007 04:40:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141191#M5861</guid>
      <dc:creator>bobbyAIR</dc:creator>
      <dc:date>2007-08-01T04:40:32Z</dc:date>
    </item>
    <item>
      <title>Re: Newbie: Problem using MC13192 on AVR AT90CAN128</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141192#M5862</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Well, thank you Bobby. I have incorporated those changes. But do we need to initialize all the MC13192 registers before we can read some?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What i have done in my code is that, after initializing my SPI interface on the MCU(AT90CAN128) side, i RESET my MC13192 transceiver. I can see the clocks on my oscilloscope once i release the RESET line to high.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;As the transceiver's reference manual says, after RESET the Transceiver goes to the Idle condition and the registers are set to there default values. So, through my code , i am trying to read some of the registers by sending register address on the MOSI. But for each register address, what i get on MISO is 0x0000. Here is my code for the same:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include&amp;lt;avr/io.h&amp;gt;&lt;BR /&gt;#include&amp;lt;avr/interrupt.h&amp;gt;&lt;BR /&gt;#include&amp;lt;inttypes.h&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;#define F_CPU 16000000L&amp;nbsp;&amp;nbsp; /* MCU Clock Speed */&lt;BR /&gt;#define SPI_PORT PORTB&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Define SPI port */&lt;BR /&gt;#define SS PB0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The SPI Slave Select Bit */&lt;/DIV&gt;&lt;DIV&gt;uint16_t u16Rx_SPI = 0x1234; /* Initial Values. They have no meaning in perticular */&lt;BR /&gt;uint16_t delay_count;&lt;BR /&gt;uint8_t u8temp = 0x65;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Initial Values. They have no meaning in perticular */&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;/* RESET delay routine */&lt;BR /&gt;void delay(uint8_t ms)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; uint16_t cnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm volatile (&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "\n"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "L_dl1%=:" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "mov %A0, %A2" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "mov %B0, %B2" "\n"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "L_dl2%=:" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "sbiw %A0, 1" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "brne L_dl2%=" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "dec %1" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "brne L_dl1%=" "\n\t"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; : "=&amp;amp;w" (cnt)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; : "r" (ms), "r" (delay_count)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void AssertSPI()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_PORT |= (0&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void DeAssertSPI()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_PORT |= (1&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void MC13192_Reset()&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRD&amp;nbsp; |= (1 &amp;lt;&amp;lt; DDD7) | (1 &amp;lt;&amp;lt; DDD1) | (1&amp;lt;&amp;lt;DDD0); //Set Direction register as output&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD |= (0 &amp;lt;&amp;lt; PD7); //Resetting the ZB chip by pulling low RST pin&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay(10);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD |= (1 &amp;lt;&amp;lt; PD7); //Set to normal mode ZB chip to pulling high&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay(25);&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;void SPI_MasterInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set MOSI and SCK and SS as output */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRB |= (1&amp;lt;&amp;lt;DDB2)|(1&amp;lt;&amp;lt;DDB1)|(1&amp;lt;&amp;lt;DDB0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable SPI, Master, set clock rate fck/16 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPCR |= (1&amp;lt;&amp;lt;SPE)|(1&amp;lt;&amp;lt;MSTR)|(1&amp;lt;&amp;lt;SPR0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;uint8_t SPI_SingularTransaction(uint8_t data)&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPDR = data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPSR &amp;amp;(1&amp;lt;&amp;lt;SPIF)));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SPDR;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;void SPIDrvRead(uint8_t reg_address)&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg_address |= 0x80; /* Set MSB for read access */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AssertSPI();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u8temp = SPI_SingularTransaction(reg_address);&amp;nbsp; /* Temp clear's the MISO initial data */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u16Rx_SPI = SPI_SingularTransaction(0x99);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; /* 0x99 is the dummy data */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u16Rx_SPI = (Rx_SPI&amp;lt;&amp;lt;8);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u16Rx_SPI |= SPI_SingularTransaction(0x99);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 0x99 is the dummy data */&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; DeAssertSPI();&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void main()&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay_count = F_CPU/4000;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_MasterInit();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZB_Reset();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x0F);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x10);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x12);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDrvRead(0x1B);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1);&lt;/DIV&gt;&lt;DIV&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 Aug 2007 19:23:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141192#M5862</guid>
      <dc:creator>Ravs</dc:creator>
      <dc:date>2007-08-04T19:23:57Z</dc:date>
    </item>
    <item>
      <title>Re: Newbie: Problem using MC13192 on AVR AT90CAN128</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141193#M5863</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Still You do not select modem as a SPI slave. You have to change AssertSPI() to&lt;BR /&gt;void AssertSPI(){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_PORT &amp;amp;= ~(1&amp;lt;&amp;lt;SS);&lt;BR /&gt;}&lt;BR /&gt;Notice that:&lt;BR /&gt;1&amp;lt;&amp;lt;SS is the same like 00000000 and if SS (PB0) pin is high ( it shoud be on startup ) your instruction doesnt do anything because&lt;BR /&gt;xxxxxxx1 | 00000000 = xxxxxxx1 ( where x is 0 or 1 )&lt;BR /&gt;If You use ~(1&amp;lt;&amp;lt;SS) You will get 11111110 and instruction&lt;BR /&gt;xxxxxxx1 &amp;amp; 11111110 = xxxxxxx0 wil do what you want.&lt;BR /&gt;Next in SPI_master_init() You shoud put SS pin High as default state because in this place You put this pin as uotput but it remains low becase its is its default state ( after reset all ports registers are 0x00 )&lt;BR /&gt;so you have to put&lt;BR /&gt;SPI_PORT |= (1&amp;lt;&amp;lt;SS) or deassertSPI() function it it&lt;BR /&gt;Also you can write assert and deassert functions as inline functions&lt;BR /&gt;And in SPI_Drv_Read ther is instruction between two SPI tranzactions but it is better to not put anything there because it can brake transaction I think better is to do something like that&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;uint16_t SPIDrvRead(uint8_t reg_address)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; uint8_t msb,lsb;&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg_address |= 0x80; /* Set MSB for read access */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AssertSPI();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_SingularTransaction(reg_address);&amp;nbsp; /* Temp clear's the MISO initial data */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msb = SPI_SingularTransaction(0x99);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; /* 0x99 is the dummy data */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lsb= SPI_SingularTransaction(0x99);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 0x99 is the dummy data */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeAssertSPI();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (msb&amp;lt;&amp;lt;8)|lsb;&lt;BR /&gt;}&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Aug 2007 23:19:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141193#M5863</guid>
      <dc:creator>bobbyAIR</dc:creator>
      <dc:date>2007-08-07T23:19:16Z</dc:date>
    </item>
    <item>
      <title>Re: Newbie: Problem using MC13192 on AVR AT90CAN128</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141194#M5864</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Anteoo System have a nice open source sample to use as starting point: &lt;A href="http://www.anteeo.se/zigbee.php" rel="nofollow" target="_blank"&gt;http://www.anteeo.se/zigbee.php&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've taken that code and doing some changes to implement the Packet Mode and a version not so dependant on the ISR. If anyone is interested to see that code and/or help with development, let me know.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 Dec 2011 20:27:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Newbie-Problem-using-MC13192-on-AVR-AT90CAN128/m-p/141194#M5864</guid>
      <dc:creator>GusPS</dc:creator>
      <dc:date>2011-12-20T20:27:32Z</dc:date>
    </item>
  </channel>
</rss>

