Tool/software: Code Composer Studio
Hi everyone,
I need communication between two TM4C123GH6PM board. İ read this codes,everythink is ok but read functions doesnt work. What can i do ?
Master Code ;
#define NUM_SSI_DATA 3
char char_deger;
int durum;
uint32_t Data_Alinan[NUM_SSI_DATA];
uint32_t Data_Gönderilen = 1;
uint32_t Data_Onay = 4;
uint32_t ui32Index;
void int_to_char(uint32_t number)
{
if(number==0) char_deger='0';
if(number==1) char_deger='1';
if(number==2) char_deger='2';
if(number==3) char_deger='3';
if(number==4) char_deger='4';
if(number==5) char_deger='5';
if(number==6) char_deger='6';
if(number==7) char_deger='7';
if(number==8) char_deger='8';
if(number==9) char_deger='9';
}
void SSI_KONTROL(void)
{
if(Data_Alinan[0] != 0){ ///Veri Başarıyla alındı
SSIDataPut(SSI0_BASE, Data_Onay);
int_to_char(Data_Alinan[0]);
UARTCharPut(UART0_BASE, char_deger);
int_to_char(Data_Alinan[1]);
UARTCharPut(UART0_BASE, char_deger);
int_to_char(Data_Alinan[2]);
UARTCharPut(UART0_BASE, char_deger);
}
}
void SSI_DATA_AL(void)
{
while(SSIBusy(SSI0_BASE)){}; //SPI müsait mi
for(ui32Index = 0; ui32Index < NUM_SSI_DATA; ui32Index++)
{
SSIDataGet(SSI0_BASE, &Data_Alinan[ui32Index]);
Data_Alinan[ui32Index] &= 0x00FF;
while(SSIBusy(SSI0_BASE)){};
}
}
void SSI_DATA_BAS(uint32_t SSI_NUMBER,uint32_t DATA)
{
SSIDataPut(SSI_NUMBER, DATA); //// Veri isteğinde bulunuluyor
}
void btn_kesme(void)
{
durum = GPIOIntStatus(GPIO_PORTF_BASE, true);
GPIOIntClear(GPIO_PORTF_BASE, GPIO_PIN_0);
while(SSIDataGetNonBlocking(SSI0_BASE, &Data_Alinan[0])) ///SPI müsait mi ????
{
}
SSI_DATA_BAS(SSI0_BASE, Data_Gönderilen); //// Veri isteğinde bulunuluyor
while(SSIBusy(SSI0_BASE)) ////İşlemin bitmesi bekleniyor
{
}
}
void InitConsole_UART(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
UARTDisable(UART0_BASE);
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
UARTEnable(UART0_BASE);
}
void InitConsole_SPI(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |GPIO_PIN_2);
GPIOPinConfigure(GPIO_PA2_SSI0CLK);
GPIOPinConfigure(GPIO_PA3_SSI0FSS);
GPIOPinConfigure(GPIO_PA4_SSI0RX);
GPIOPinConfigure(GPIO_PA5_SSI0TX);
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |GPIO_PIN_2);
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_TI,SSI_MODE_MASTER, 1000000, 8);
SSIEnable(SSI0_BASE);
}
void InitConsole_BUTTON(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK)=GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE+GPIO_O_CR)=0x01;
HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK)=0;
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE , GPIO_PIN_0);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU);
GPIOIntRegister(GPIO_PORTF_BASE,btn_kesme);
GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_FALLING_EDGE);
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_PIN_0);
IntEnable(INT_GPIOF);
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
InitConsole_UART();
InitConsole_SPI();
InitConsole_BUTTON();
Data_Alinan[0]=0;
while(1){
SSI_DATA_BAS(SSI0_BASE, Data_Gönderilen); //// Veri isteğinde bulunuluyor
while(SSIBusy(SSI0_BASE)){};
SSI_DATA_AL();
while(SSIBusy(SSI0_BASE)){};
SSI_KONTROL();
while(SSIBusy(SSI0_BASE)){};
}
}
Slave Code ;
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_can.h"
#include "inc/hw_ints.h"
#include "inc/hw_gpio.h"
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/gpio.h"
#include "driverlib/uart.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/pwm.h"
#include "driverlib/rom.h"
#include "driverlib/i2c.h"
#include "driverlib/rom_map.h"
#include "driverlib/watchdog.h"
#include "driverlib/adc.h"
#include "driverlib/can.h"
#include "driverlib/eeprom.h"
#include "driverlib/timer.h"
#include "driverlib/ssi.h"
bool isAdcReadOk;
#define NUM_SSI_DATA 3
uint32_t ui32ADC0Value[3];
uint32_t ui32Index;
uint32_t ulindex;;
uint32_t Data_Alinan[3];
void adckesme(void)
{
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE , 3, ui32ADC0Value);
}
void SSI_DATA_BAS(uint32_t SSI_NUMBER,uint32_t *DATA)
{
for(ui32Index = 0; ui32Index < NUM_SSI_DATA; ui32Index++)
{
SSIDataPut(SSI_NUMBER, *DATA); //// Veri isteğinde bulunuluyor
}
}
void data_receive(void)
{
while(SSIBusy(SSI0_BASE)){};
for(ulindex = 0; ulindex < NUM_SSI_DATA; ulindex++) /// SPI Datasını Al
{
SSIDataGet(SSI0_BASE, &Data_Alinan[ulindex]);
Data_Alinan[ulindex] &= 0x00FF;
while(SSIBusy(SSI0_BASE)){};
}
}
void InitConsole_SPI(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA2_SSI0CLK);
GPIOPinConfigure(GPIO_PA3_SSI0FSS);
GPIOPinConfigure(GPIO_PA4_SSI0RX);
GPIOPinConfigure(GPIO_PA5_SSI0TX);
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |GPIO_PIN_2);
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_SLAVE, 1000000, 8);
SSIEnable(SSI0_BASE);
}
int main(void)
{
SysCtlClockSet(SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ|SYSCTL_SYSDIV_5);
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ADCHardwareOversampleConfigure(ADC0_BASE,64);
ADCSequenceDisable(ADC0_BASE, 3);
ADCSequenceConfigure(ADC0_BASE , 3, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC0_BASE, 3, 0 , ADC_CTL_TS|ADC_CTL_IE|ADC_CTL_END);
ADCSequenceEnable(ADC0_BASE, 3);
ADCIntEnable(ADC0_BASE, 3);
ADCIntRegister(ADC0_BASE, 3, adckesme);
IntEnable(INT_ADC0SS3);
InitConsole_SPI();
while(1)
{
ADCProcessorTrigger(ADC0_BASE , 3);
data_receive();
if(Data_Alinan[0]==1){ ///// SPI dan Veri Talebi Geldi mi ?
if(ui32ADC0Value[0] != 0 ){ //// ADC de gönderilecek bir veri var mı ???
SSI_DATA_BAS(SSI0_BASE , ui32ADC0Value);
}
}
}
}