Подключение трансивера к контролеру по SPI интерфейсу
-
PeLenG_333
- Родился
- Сообщения: 9
- Зарегистрирован: Пн апр 02, 2012 13:42:15
Подключение трансивера к контролеру по SPI интерфейсу
Помогите пожалуйста. Нам необходимо запрограммировать передачу и прием данных от RFM 22 433 D на контролер M16C.
Я скачал проги - но ни одна правильно не работает, хоть и все перелопатил. Если у кого-то завалялась прога под передачу и прием по SPI - пришлите пожалста. Или скажите где выкачать. Ну или хотябы подскажите советом. Спасибо.
Я скачал проги - но ни одна правильно не работает, хоть и все перелопатил. Если у кого-то завалялась прога под передачу и прием по SPI - пришлите пожалста. Или скажите где выкачать. Ну или хотябы подскажите советом. Спасибо.
- Реклама
Re: Подключение трансивера к контролеру по SPI интерфейсу
PeLenG_333 писал(а):RFM 22 433 D на контролер M16C.
Щас все брошу и начну искать доку на RFM 22 433 D и контролер M16C
Хотя, может быть, у кого-то закрома прям ломятся от RFM 22 433 D и контролеров M16C
-
PeLenG_333
- Родился
- Сообщения: 9
- Зарегистрирован: Пн апр 02, 2012 13:42:15
Re: Подключение трансивера к контролеру по SPI интерфейсу
Если вы такой умный (или решили повыпендриваться от нечего делать), то не пишите и не смотрите вообще сюда.
Re: Подключение трансивера к контролеру по SPI интерфейсу
Я не умный, я добрый
Хочу помочь чайнику сформулировать вопрос так, чтоб всем захотелось ему ответить. А чайник в ответ - грубит. Никто не полезет в инет разыскивать эти таинственные дивайсы, а если спрашивающий выложит схему: это у меня на входе, это - на выходе, это я попробовал - но не выходит -- мудрые коты поправят и научат.
-
PeLenG_333
- Родился
- Сообщения: 9
- Зарегистрирован: Пн апр 02, 2012 13:42:15
Re: Подключение трансивера к контролеру по SPI интерфейсу
Приношу извинения. Вот схемка. Это нужно запрограммировать для пакетной передачи на С.
- Вложения
-
- Схемка.png
- (174.6 КБ) 434 скачивания
- Реклама
Re: Подключение трансивера к контролеру по SPI интерфейсу
Вот совсем другой коленкор.
Я, к сожалению, с Ренесасовскими МК дел не имел и на Си для МК не пишу. Можем обсудить общие положения.
Если определен тип МК и компилятор к нему, очевидно, есть документация на этот компилятор. Если в ней есть библиотеки для SPI, проблем быть не должно, если нет - алгоритм достаточно простой.
1. Инициализируем порт для работы в режиме SPI, т.к. судя по схеме, эти выводы могут работать и в других режимах ( UART ).
2. Переводим линию CS в низкий уровень.
3. В регистр данных загружаем передаваемый байт.
4. Дожидаемся окончания передачи байта и идем на п.3.
5. Когда все байты переданы, переводим линию CS в высокий.
Если требуется и что-то принимать, то после п. 4 считываем из регистра данных байт, принятый от вн.устройства.
Вот приблизительно в таком разрезе. Но по 16-битным тут, кажется, немногие спецы - самые отъявленные из гуру. Может быть, помогут. Я -- пас. Честно - если бы мне это понадобилось - я бы повесился. Сложный МК, на первый взгляд, по сравнению с детской простотой AVR.
Я, к сожалению, с Ренесасовскими МК дел не имел и на Си для МК не пишу. Можем обсудить общие положения.
Если определен тип МК и компилятор к нему, очевидно, есть документация на этот компилятор. Если в ней есть библиотеки для SPI, проблем быть не должно, если нет - алгоритм достаточно простой.
1. Инициализируем порт для работы в режиме SPI, т.к. судя по схеме, эти выводы могут работать и в других режимах ( UART ).
2. Переводим линию CS в низкий уровень.
3. В регистр данных загружаем передаваемый байт.
4. Дожидаемся окончания передачи байта и идем на п.3.
5. Когда все байты переданы, переводим линию CS в высокий.
Если требуется и что-то принимать, то после п. 4 считываем из регистра данных байт, принятый от вн.устройства.
Вот приблизительно в таком разрезе. Но по 16-битным тут, кажется, немногие спецы - самые отъявленные из гуру. Может быть, помогут. Я -- пас. Честно - если бы мне это понадобилось - я бы повесился. Сложный МК, на первый взгляд, по сравнению с детской простотой AVR.
-
PeLenG_333
- Родился
- Сообщения: 9
- Зарегистрирован: Пн апр 02, 2012 13:42:15
Re: Подключение трансивера к контролеру по SPI интерфейсу
Спасибо за консульнацию!
У нас просто отладочный набор именно с этим контроллером. Ничего не поделаешь.
Re: Подключение трансивера к контролеру по SPI интерфейсу
Недавно поднималась тема на подобные модули http://radiokot.ru/forum/viewtopic.php? ... ilit=RFM22 посмотрите
-
PeLenG_333
- Родился
- Сообщения: 9
- Зарегистрирован: Пн апр 02, 2012 13:42:15
Re: Подключение трансивера к контролеру по SPI интерфейсу
среда разработки для Renesas M16C6C - HEW - сгенерировала мне код для SPI, но я не могу в нем разобраться куда дописывать свои функции для принятия и отправки данных на трансивер RFM22. Помогите пожалуйста разобраться. Хотя бы, куда нужно что писать.
Заранее благодарен!!
Заранее благодарен!!
Код: Выделить всё
/******************************************************************************
* DISCLAIMER:
* The software supplied by Renesas Technology Europe Ltd is
* intended and supplied for use on Renesas Technology products.
* This software is owned by Renesas Technology Europe, Ltd. Or
* Renesas Technology Corporation and is protected under applicable
* copyright laws. All rights are reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS,
* IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* APPLY TO THIS SOFTWARE. RENESAS TECHNOLOGY AMERICA, INC. AND
* AND RENESAS TECHNOLOGY CORPORATION RESERVE THE RIGHT, WITHOUT
* NOTICE, TO MAKE CHANGES TO THIS SOFTWARE. NEITHER RENESAS
* TECHNOLOGY AMERICA, INC. NOR RENESAS TECHNOLOGY CORPORATION SHALL,
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER ARISING OUT OF THE
* USE OR APPLICATION OF THIS SOFTWARE.
******************************************************************************/
/* Copyright (C) 2008. Renesas Technology Europe, All Rights Reserved */
/*””FILE COMMENT””******************************* Technical reference data ****
* File Name : main_serial_spi.c
* Version : 1.00
* Device : M16C/6C (R5F36CAMDFB)
* Tool Chain : HEW, NC30 V5.44
* H/W Platform : RSKM16C6C
* Description : Demonstration of M16c6c on-chip Serial Interface (SIO3/SIO4)
*
* Operation: 1. Make the following connections on RSKM16C6C -
* a. CPU port pin - p6_1 (J2-5) -> P7_2 (J1-26)
* b. CPU port pin - p6_2 (J2-4) -> p7_0 (J1-28)
* c. CPU port pin - p6_3 (J2-3) -> p7_1 (J1-27)
* 2. Build this application and download it to the target.
* 3. Click on the "Reset Go" icon available on 'Debug' toolbar.
* 4. The debug LCD will display the message "SPI-COMM".
* 5. A string "Renesas" will be transmitted from UART0
* to serial port UART2.
* 6. The string received by UART2 will be displayed on the
* debug LCD.
* 7. The user can also examine the string received by UART2 in
* the variable "c_RecBuff" using HEW C watch window.
* Note: This file contains a compiler directive "#pragma interrupt
* functionname" which instructs the compiler to treat the following
* function as an interrupt. The compiler will save all registers
* used in the function and replace the normal RTS instruction with an RTE
* instruction at the end of the function.
*
******************************************************************************/
/******************************************************************************
* History : 30.10.2008 Ver. 1.00 First Release
*””FILE COMMENT END””*********************************************************/
/******************************************************************************
User Includes (Project level includes)
******************************************************************************/
/* Following header file provides a structure to access on-chip I/O
registers. */
#include "sfr6c.h"
/* Following header file provides common defines for widely used items. */
#include "rskm16c6cdef.h"
/* Following header file provides useful macros and function prototypes for
controling the LCD interface. */
#include "lcd.h"
/* Following header file provides prototypes for the functions defined in this
file. */
#include "main_serial_spi.h"
/*******************************************************************************
Constants
*******************************************************************************/
/* Constant data to be transmitted */
const char c_data[8] = "Renesas";
/*******************************************************************************
Global Variables
*******************************************************************************/
/* Buffer to store the received data */
volatile char c_RecBuff[8];
/*******************************************************************************
User Program Code
*******************************************************************************/
/*””FUNC COMMENT””**************************************************************
* Outline : main
* Description : Main program
* Argument : none
* Return value : none
*””FUNC COMMENT END””**********************************************************/
void main(void)
{
/* Used as a loop counter */
unsigned char i;
/* Used to generate delay */
unsigned short dly;
/* Reset the LCD module */
InitialiseDisplay();
/* Display Renesas Splash Screen */
DisplayString(LCD_LINE1,APP_NAME);
/* Enable writing to register pclk register */
prc0 =1;
/* Select f1 as a clock source to SIO3/4 */
pclk0=0;
/* Disable writing to register pclk register */
prc0 =0;
/* Configure UART0 for transmission */
SPI_Master_init();
/* Configure UART2 for reception */
SPI_Slave_init();
/* Enable interrupts */
ENABLE_IRQ
/* This loop transmits all chracters contained in the 'c_data' buffer */
for (i=0; i<sizeof(c_data); i++)
{
while(ti_u0c1 == 0)
{
/* wait for previous transmission to complete */
}
/* Load the data to be transmitted, in the transmit buffer */
u0tb = (unsigned short) c_data[i];
for (dly=0xffffU; dly>0; dly--)
{
/* Delay */
}
}
/* Display the received string on the second line of the debug LCD. */
DisplayString(LCD_LINE2,c_RecBuff);
/* This loop should never exit. */
while (1);
}
/******************************************************************************
End of function main
******************************************************************************/
/*””FUNC COMMENT””**************************************************************
* Outline : SPI_Master_init
* Description : Configures UART0 in transmit mode
* Argument : none
* Return value : none
*””FUNC COMMENT END””**********************************************************/
void SPI_Master_init(void)
{
/* Port pin configuration */
/* Configure the port pin p6_1 (CLK0) as output. */
pd6_1 = 1;
/* Configure the port pin p6_3 (TXD0) as output. */
pd6_3 = 1;
/* Configure the port pin p6_1 (RXD0) as input. */
pd6_2 = 0;
/* Clock select */
uclksel0 = 0x00;
/* Enable writing to register pclk register */
prc0 =1;
/* Select f1SIO as a clock source to UART0-UART2 */
pclk1=1;
/* Disable writing to register pclk register */
prc0 =0;
/* Set master clock bit rate */
u0brg = (unsigned char)(((f1_CLK_SPEED)/(BIT_RATE))-1);
/* UART0 transmit/receive mode register
b2:b0 - SMD12:SMD1 - 001 (Synchronous Serial Mode selected)
b3 - CKDIR - 0 (Internal clock selected)
b4 - STPS - 0 (1 Stop bit)
b5 - PRY - 0 (No parity used)
b6 - PRYE - 0 (No parity used)
b7 - IOPOL - 0 (TXD, RXD polarity not inverted) */
u0mr = 0x01;
/* UART0 transmit/receive control register 0
b1:b0 - CLK01:CLK0 - 0 (U0BRG count source select bits -f1SIO or f2SIO selected)
b2 - CRS - 0 (CTS/RTS function select bit (Set to 0))
b3 - TXEPT - 0 (Clear transmit register empty flag)
b4 - CRD - 1 (Disable CTS/RTS function)
b5 - NCH - 0 (CMOS Data output selected)
b6 - CKPOL - 1 (Transmit data is output at the rising edge of
transmit/receive clock and receive data is input at
the falling edge.
b7 - UFORM - 1 (MSB first selected) */
u0c0 = 0xd0;
/* UART0 transmit/receive control register 1
b0 - TE - 1 (Enable transmission)
b1 - TI - 0 (Clear the 'transmit buffer empty' flag)
b2 - RE - 1 (Enable reception)
b3 - RI - 0 (Clear the 'Receive complete' flag)
b5:b4 - Reserved - 0
b6 - UOLCH - 0 (non-inverse data logic selected)
b7 - UOERE - 0 (Error signal output disable) */
u0c1 = 0x05;
/* Unused in synchronous serial mode. Set to 0. */
u0smr = 0x00;
/* Unused in synchronous serial mode. Set to 0. */
u0smr2 = 0x00;
/* UARTi Special Mode Register 3
Bit b3 - NODC - Set to 0 in order to select 'CLKi is CMOS output'
Remaining bits are not applicable in synchronous serial mode. Set to 0. */
u0smr3 = 0x00;
/* Unused in synchronous serial mode. Set to 0. */
u0smr4 = 0x00;
/* Select 'Transmit buffer empty' as an interrupt source for UART0 transmit
interrupt. */
ucon |= 0x01;
/* Interrupt Control Register for UART0 transmit
b2:b0 - ILVL2:ILVL0 - 011 (Interrupt priority 3 selected for UART0
transmit)
b3 - IR - 0 (Interrupt request bit. Set to 0)
b4 - POL - 0 (Polarity select bit. Set to 0.)
b5 - Reserved - 0
b7:b6 - Reserved - 0 */
s0tic = 0x03;
}
/******************************************************************************
End of function SPI_Master_init
******************************************************************************/
/*””FUNC COMMENT””**************************************************************
* Outline : SPI_Slave_init
* Description : Configures UART2 in receive mode
* Argument : none
* Return value : none
*””FUNC COMMENT END””**********************************************************/
void SPI_Slave_init(void)
{
/* Port pin configuration */
/* Configure the port pins as follows -
p7_0 (TXD2) - output
p7_1 (RXD2) - input
p7_2 (CLK2) - output */
pd7 = 0x09;
/* Set master clock bit rate */
u2brg = (unsigned char)(((f1_CLK_SPEED)/(BIT_RATE))-1);
/* UART2 transmit/receive mode register
b2:b0 - SMD12:SMD1 - 001 (Synchronous Serial Mode selected)
b3 - CKDIR - 1 (External clock selected)
b4 - STPS - 0 (1 Stop bit)
b5 - PRY - 0 (No parity used)
b6 - PRYE - 0 (No parity used)
b7 - IOPOL - 0 (TXD, RXD polarity not inverted) */
u2mr = 0x09;
/* UART2 transmit/receive control register 0
b1:b0 - CLK01:CLK0 - 0 (U2BRG count source select bits -f1SIO or f2SIO
selected)
b2 - CRS - 0 (CTS/RTS function select bit (Set to 0))
b3 - TXEPT - 0 (Clear transmit register empty flag)
b4 - CRD - 1 (Disable CTS/RTS function)
b5 - NCH - 0 (CMOS Data output selected)
b6 - CKPOL - 1 (Transmit data is output at the rising edge of
transmit/receive clock and receive data is input
at the falling edge.
b7 - UFORM - 1 (MSB first selected) */
u2c0 = 0xd0;
/* UART0 transmit/receive control register 1
b0 - TE - 1 (Enable transmission)
b1 - TI - 0 (Clear the 'transmit buffer empty' flag)
b2 - RE - 1 (Enable reception)
b3 - RI - 0 (Clear the 'Receive complete' flag)
b4 - U2lRS - 0 (UART2 transmit interrupt source - U2TB
register empty)
b5 - U0RRM - 1 (Continuous receive mode enabled)
b6 - UOLCH - 0 (non-inverse data logic selected)
b7 - UOERE - 0 (Error signal output disable) */
u2c1 = 0x25;
/* Unused in synchronous serial mode. Set to 0. */
u0smr = 0x00;
/* Unused in synchronous serial mode. Set to 0. */
u0smr2 = 0x00;
/* UARTi Special Mode Register 3
Bit b3 - NODC - Set to 0 in order to select 'CLKi is CMOS output'
Remaining bits are not applicable in synchronous serial mode. Set to 0. */
u0smr3 = 0x00;
/* Unused in synchronous serial mode. Set to 0. */
u0smr4 = 0x00;
/* Interrupt Control Register for UART2 receive
b2:b0 - ILVL2:ILVL0 - 101 (Interrupt priority 5 selected for UART2
transmit)
b3 - IR - 0 (Interrupt request bit. Set to 0)
b4 - POL - 0 (Polarity select bit. Set to 0.)
b5 - Reserved - 0
b7:b6 - Reserved - 0 */
s2ric = 0x05;
/* Dummy write to UART2 receive & transmit register */
u2rb = 0x00U;
u2tb = 0x00U;
}
/******************************************************************************
End of function SPI_Slave_init
******************************************************************************/
/*””FUNC COMMENT””**************************************************************
* Outline : _uart0_transmit
* Description : Interrupt handler for UART0 transmit
* Argument : none
* Return value : none
*””FUNC COMMENT END””**********************************************************/
#pragma interrupt _uart0_transmit(vect=17)
void _uart0_transmit(void)
{
/* Clear the 'transmission complete' flag. */
ir_s0tic = 0;
}
/******************************************************************************
End of ISR _uart0_transmit
******************************************************************************/
/*””FUNC COMMENT””**************************************************************
* Outline : _uart2_receive
* Description : Interrupt handler for UART2 receive
* Argument : none
* Return value : none
*””FUNC COMMENT END””**********************************************************/
#pragma interrupt _uart2_receive(vect=16)
void _uart2_receive(void)
{
/* Used to reference a specific location in the array while string the
received data. */
static unsigned char uc_cnt;
/* Copy the received data to the global variable 'c_RecBuff' */
c_RecBuff[uc_cnt] = (char)u2rb ;
/* Dummy write to the receive register to reinitiate a receive operation. */
u2rb = 0x00;
/* Check if the buffer size is exceed. If it is then reset the 'uc_cnt'
variable. */
if(uc_cnt++ >= sizeof(c_RecBuff))
{
/* Reinitialize the buffer reference. */
uc_cnt = 0;
}
/* Clear the 'transmission complete' flag. */
ir_s2ric = 0;
}
/******************************************************************************
End of ISR _uart2_receive
******************************************************************************/

