📄 c2000scitest_2812tgt.c
字号:
/*
* File: c2000scitest_2812tgt.c
*
* Real-Time Workshop code generated for Simulink model c2000scitest_2812tgt.
*
* Model version : 1.104
* Real-Time Workshop file version : 6.3 (R14SP3) 26-Jul-2005
* Real-Time Workshop file generated on : Sat Dec 13 20:37:34 2008
* TLC version : 6.3 (Aug 5 2005)
* C source code generated on : Sat Dec 13 20:37:35 2008
*/
#include "c2000scitest_2812tgt.h"
#include "c2000scitest_2812tgt_private.h"
/* user code (top of source file) */
#ifdef DEFINE_SCI_A_CMD1
#undef DEFINE_SCI_A_CMD1
#define DEFINE_SCI_A_RxTx
#else
#define DEFINE_SCI_A_CMD
char_T SCI_A_cmd;
#endif
#define Rx_A_BUF 5
int_T SCI_A_firstRnd = 0;
int_T Rx_A_Total;
#ifndef DEFINE_SCI_A_CMD
#define DEFINE_SCI_A_CMD1
char_T SCI_A_cmd;
#endif
#ifndef DEFINE_SCI_A_CMD1
#define DEFINE_SCI_A_RxTx1
#endif
/* Exported block signals */
int8_T SCI_ReceiveData; /* '<Root>/C28x SCI Receive' */
/* Real-time model */
RT_MODEL_c2000scitest_2812tgt c2000scitest_2812tgt_M_;
RT_MODEL_c2000scitest_2812tgt *c2000scitest_2812tgt_M = &c2000scitest_2812tgt_M_;
/* Model step function */
void c2000scitest_2812tgt_step(void)
{
/* S-Function Block: <Root>/C28x SCI Receive (c28xsci_rx) */
{
{
#ifndef DEFINE_SCI_A_CMD1
int_T SCI_A_t = 0; //Rx/Tx timer counting
char_T Rx_A_Text[Rx_A_BUF];
extern char_T SCI_A_cmd;
static int_T SCI_A_results[1];
if (SciaRegs.SCIRXST.all & 0x0040) {
char_T SCI_A_flush;
char_T Rx_A_Fail;
SCI_A_flush = SciaRegs.SCIRXBUF.all;
if (SCI_A_flush == 36) { // check whether or not the HOST is requesting the premission to send command instruction
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 66; // B -> handshaking
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36; // $ -> handshaking
Rx_A_Fail = 0;
Rx_A_Total = (1*2)+2;
/* receiving data */
for (SCI_A_t=0;;) {
if (SCI_A_t > Rx_A_Total) {
Rx_A_Fail = 1;
break;
}
if (SciaRegs.SCIRXST.all & 0x0040) {
Rx_A_Text[SCI_A_t] = SciaRegs.SCIRXEMU;
SCI_A_t++;
SCI_A_flush = SciaRegs.SCIRXBUF.all;
if (SCI_A_flush == 36) { break; }
}
}
Rx_A_Text[SCI_A_t] = '\0';
SCI_A_cmd = *Rx_A_Text;
/* setup default/initial values for output port at first and only first time step. *
* when time step > 1, output ports output received */
if (SCI_A_firstRnd == 0) {
SCI_A_firstRnd = 1;
SCI_A_results[0] = 1;
} else {
SCI_A_firstRnd = 1;
if (Rx_A_Fail == 0) {
int_T resultIdx = 0;
if (SCI_A_cmd == 83) { // SCI_A_cmd == 'S' --> Set / Tunning
Rx_A_Total = (1*2)+2;
for (SCI_A_t = 1;SCI_A_t < Rx_A_Total-1;) {
char_T base = 0;
int_T value = 0;
int_T idx = 0;
uint_T datatype = 2;
for (idx = 0;idx < datatype;idx++,SCI_A_t++) {
if (*(Rx_A_Text+SCI_A_t) < 58) {
base = 48;
} else if (*(Rx_A_Text+SCI_A_t) < 71) {
base = 55;
} else if (*(Rx_A_Text+SCI_A_t) < 103) {
base = 87;
}
value += (*(Rx_A_Text+SCI_A_t)-base) << (idx*4); // receiving order -- low bytes , high bytes --> LITTLE ENDIEN
}
if(value>= 128){ // CCS doesn't have int8 data type, for int8: 10000000 ~ 111111111 = -128 ~ -1
value-=256; // CCS data converted to TMW data, for CCS: 10000000 ~ 111111111 = 128 ~ 255
}
SCI_A_results[resultIdx++] = value;
}
}
}
else {
SCI_A_cmd = NULL;
}
}
}
}
#endif
//if (SCI_A_cmd == 83) // SCI_A_cmd == 'S' --> Set / Tunning
SCI_ReceiveData = SCI_A_results[0];
if (SCI_A_cmd == 73) { // SCI_A_cmd == 'I' --> Info from Rx
char_T names[] = "Rx";
char_T eles[] = "[1]";
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 1+48;
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 44; // comma ','
for (SCI_A_t = 0; SCI_A_t<strlen(names);SCI_A_t++) {
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = names[SCI_A_t];
}
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 44; // comma ','
for (SCI_A_t = 0; SCI_A_t<strlen(eles);) {
if(eles[SCI_A_t] == 91 || eles[SCI_A_t] == 32) {
SCI_A_t += 1;
} else if(eles[SCI_A_t] == 46) {
SCI_A_t += 2;
}
if(SCI_A_t < strlen(eles)-1) {
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = eles[SCI_A_t++];
} else {SCI_A_t++;}
}
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
} else if(SCI_A_cmd == 65) { // SCI_A_cmd == 'A' --> Auto Baud Detection
#ifdef DEFINE_SCI_A_RxTx1
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 65; // 'A' -> input and output
#else
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 73; // 'I' -> input only
#endif
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
}
#ifndef DEFINE_SCI_A_RxTx1
if (SCI_A_cmd == 81 || SCI_A_cmd == 71) { // if Tx does not exist && SCI_A_cmd == 'Q' || 'G'
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 85; // 'U' -> undefined
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
}
SCI_A_cmd = NULL;
#endif
}
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; // Re-enable receive FIFO operation.
}
/* S-Function Block: <Root>/C28x SCI Transmit (c28xsci_tx) */
{
{
extern char_T SCI_A_cmd;
static int_T SCI_A_incoming[1];
int_T datatype = 2;
int_T portN = 1;
int_T tmpVal;
int_T i = 0;
int_T j = 0;
#ifdef DEFINE_SCI_A_CMD1
int_T SCI_A_t = 0; //Rx/Tx timer counting
char_T Rx_A_Text[3]; // create a buffer to hold instructions for Tx when Rx is missing
if (SciaRegs.SCIRXST.all & 0x0040) {
char_T SCI_A_flush;
SCI_A_flush = SciaRegs.SCIRXBUF.bit.RXDT;
if (SCI_A_flush == 36) { // check whether or not the HOST is requesting the premission to send command instruction
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 66; // B -> handshaking
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36; // $ -> handshaking
for (SCI_A_t=0;;) {
if (SciaRegs.SCIRXST.all & 0x0040) {
Rx_A_Text[SCI_A_t] = SciaRegs.SCIRXEMU;
SCI_A_t++;
SCI_A_flush = SciaRegs.SCIRXBUF.bit.RXDT;
if (SCI_A_flush == 36) { break; }
}
}
Rx_A_Text[SCI_A_t] = '\0';
SCI_A_cmd = *Rx_A_Text;
}
}
#endif
if (SCI_A_cmd == 71) { // SCI_A_cmd == 'G'
SCI_A_incoming[0] = SCI_ReceiveData;
for (i = 0;i < portN;i++) {
tmpVal = SCI_A_incoming[i];
for (j = 0;j < datatype;j++) { // sending order -- low bytes , high bytes
char_T buffer;
char_T base = 0;
buffer = tmpVal;
if (j%2) {
buffer = (buffer >> 4) & 0x0f;
tmpVal = tmpVal >> 8;
} else {
buffer &= 0x0f;
}
if (buffer < 10) {
base = 48;
} else {
base = 55;
}
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = (buffer+base);
}
}
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
} else if (SCI_A_cmd == 81) { // SCI_A_cmd == 'Q' --> Query to Tx
char_T names[] = "Tx";
char_T eles[] = "[1]";
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = (datatype/2)+48;
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 44; // comma ','
for (i = 0; i<strlen(names)+1;i++) {
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = names[i];
}
SciaRegs.SCITXBUF = 44; // comma ','
for (i = 0; i<strlen(eles);) {
if(eles[i] == 91 || eles[i] == 32) {
i += 1;
}
else if(eles[i] == 46) {
i += 2;
}
else if(eles[i] == 93) {
break;
}
if(i < strlen(eles)-1) {
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = eles[i++];
} else {i++;}
}
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
}
#ifdef DEFINE_SCI_A_CMD1
if (SCI_A_cmd == 73) { // if Rx does not exist && SCI_A_cmd = 'I'
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 85; // 'U' -> undefined
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
} else if(SCI_A_cmd == 65) { // SCI_A_cmd == 'A' --> Auto Baud Detection
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 79; //'O' -> output only
for (;(SciaRegs.SCICTL2.all & 0X0080) != 0x0080;) {}
SciaRegs.SCITXBUF = 36;
}
#endif
SCI_A_cmd = NULL;
}
}
}
/* Model initialize function */
void c2000scitest_2812tgt_initialize(boolean_T firstTime)
{
if (firstTime) {
/* initialize error status */
rtmSetErrorStatus(c2000scitest_2812tgt_M, (const char_T *)0);
/* block I/O */
/* exported global signals */
SCI_ReceiveData = 0;
/* initialize non-finites */
rt_InitInfAndNaN(sizeof(real_T));
EALLOW;
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; // SCITXD, Set up pins as SCI pins.
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; // SCIRXD, Set up pins as SCI pins.
EDIS;
EALLOW;
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; // SCITXD, Set up pins as SCI pins.
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; // SCIRXD, Set up pins as SCI pins.
EDIS;
}
}
/* Model terminate function */
void c2000scitest_2812tgt_terminate(void)
{
/* (no terminate code required) */
}
/* File trailer for Real-Time Workshop generated code.
*
* [EOF]
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -