⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart0.c

📁 步进电机控制程序
💻 C
字号:
#define __UART0_H__
#include <string.h>
#include <stdlib.h>
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
#include "Uart0.h"
#include "Motor.h"
#include "Timer.h"
unsigned short u_Tx_Index; 
unsigned short u_Cmp2;
unsigned short u_Cmp3;
volatile static char uart0RxStr[3];
volatile static char uart0TxStr[34];
//---------------------------------------UART0 test function-------------------------------------
unsigned short Uart_Get_Cmp2(void)
{
return (u_Cmp2);	
}
unsigned short Uart_Get_Cmp3(void)
{
return (u_Cmp3);	
}
void __irq Uart0_RxIntOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);
    if(rSUBSRCPND&BIT_SUB_RXD0) __sub_Uart0_RxInt();
    if(rSUBSRCPND&BIT_SUB_TXD0)
         __sub_Uart0_TxInt();
    if(rSUBSRCPND&BIT_SUB_ERR0)
     __sub_Uart0_RxErrInt();
    ClearPending(BIT_UART0); 
    rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0|BIT_SUB_TXD0);	// Clear Sub int pending    
    rINTSUBMSK&=~(BIT_SUB_RXD0|BIT_SUB_ERR0);    
}
void __sub_Uart0_TxInt(void)
{ 
    static unsigned short u_Index = 0;
    rINTSUBMSK|=(BIT_SUB_TXD0);			// Just for the safety
    if(u_Index < 34) 
    {

        WrUTXH0(uart0TxStr[u_Index]);
	ClearPending(BIT_UART0);		// Clear master pending
	rSUBSRCPND=(BIT_SUB_TXD0);		// Clear Sub int pending
	rINTSUBMSK&=~(BIT_SUB_TXD0);		// Unmask sub int
	++u_Index;

    }
   else
    {
    	u_Index=0;
    	ClearPending(BIT_UART0);		// Clear master pending
        rSUBSRCPND=(BIT_SUB_TXD0);		// Clear Sub int pending
        rINTSUBMSK|=(BIT_SUB_TXD0);		// mask sub int
    }
}

void Uart_Uart0_Tx(void)
{
    if(!(rUTRSTAT0 & 0x2))return;   //Wait until THR is empty.
    if(u_Tx_Index < 34) 
    {
    	
        WrUTXH0(uart0TxStr[u_Tx_Index]);
        ++u_Tx_Index;
    }
   else
    {
    	u_Tx_Index=35;
    }
} 
struct
      {
       unsigned TX_Flag 	:1;
       unsigned RX_Flag         :1;
      }Uart;
//====================================================                                         
//Sub-routine Name:void __sub_Uart0_RxInt(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================      
void __sub_Uart0_RxInt(void)
{
 static unsigned short u_Index = 0,u_RXD_Mode = 1;
 char c_Com_A;
 c_Com_A = RdURXH0();
 if(u_RXD_Mode == 1)
  {
   if(RdURXH0()== 0xbb) 
    {
    	u_Index = 3;
    	u_RXD_Mode = 2;
    }
    else if(RdURXH0()== 0xcc)
    {
     u_Index = 1;
     u_RXD_Mode = 4;
    }
  }
  else if(u_RXD_Mode == 2)
   {
     uart0RxStr[3-u_Index] = RdURXH0();	
     u_Index--;	
     if(u_Index == 0)
      {
      	u_RXD_Mode = 1;
      	Uart.RX_Flag = 1;
      }	
   }
 else if (u_RXD_Mode == 4)
   {
    uart0TxStr[1] = RdURXH0();	
     u_Index--;	
     if(u_Index == 0)
      {
      	u_RXD_Mode = 1;
      	Uart.TX_Flag = 1;
      }			
   }
}
//====================================================                                         
//Sub-routine Name:void Uart_Uart0_Rx(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:   2004/11/13                                                     
//===================================================      
void Uart_Uart0_Rx(void)
{
 static unsigned short u_Index = 0,u_RXD_Mode = 1;
 char c_Com_A;
 if(!(rUTRSTAT0 & 0x1)) return; //Receive data ready
 c_Com_A = RdURXH0();
 if(u_RXD_Mode == 1)
  {
   if(RdURXH0()== 0xbb) 
    {
    	u_Index = 3;
    	u_RXD_Mode = 2;
    }
  else if(RdURXH0()== 0xcc)
    {
     u_Index = 1;
     u_RXD_Mode = 4;
    }
  }
  else if(u_RXD_Mode == 2)
   {
     uart0RxStr[3-u_Index] = RdURXH0();	
     u_Index--;	
     if(u_Index == 0)
      {
      	u_RXD_Mode = 1;
      	Uart.RX_Flag = 1;
      }	
   }
 else if (u_RXD_Mode == 4)
   {
    uart0TxStr[1] = RdURXH0();	
     u_Index--;	
     if(u_Index == 0)
      {
      	u_RXD_Mode = 1;
      	Uart.TX_Flag = 1;
      }			
   }
}
//====================================================                                         
//Sub-routine Name:void Uart_Unpack_Order(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================    
void Uart_Unpack_Order(void)
{
if(!Uart.RX_Flag) 
   {
    return;
   }
   Uart.RX_Flag = 0;
 switch(uart0RxStr[0])
	{
	case 0:	State.Handle = uart0RxStr[1]*256 + uart0RxStr[2];
	        break;
	case 1:	Motor_Set_X_Step(uart0RxStr[1]*256 + uart0RxStr[2]);
	        break;
	case 2:	Motor_Set_Y_Step(uart0RxStr[1]*256 + uart0RxStr[2]);
	        break;
	case 3:	Motor_Set_X_Direct(uart0RxStr[1]*256 + uart0RxStr[2]);
	        break;
	case 4:	Motor_Set_Y_Direct(uart0RxStr[1]*256 + uart0RxStr[2]);
	        break;
	case 5:	u_Cmp2 = uart0RxStr[1]*256 + uart0RxStr[2];
	        break;
	case 6:	u_Cmp3 = uart0RxStr[1]*256 + uart0RxStr[2];
	        break;
	case 7:
	       u_Drive_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 8:
	       u_Brake_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 9:
		   u_Z_Debug_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 10:
		   u_Embroider_Speed_Des = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 11:
		   //Draw_Request_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 12:
		   //Buckle_Request_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
	       break;
	case 13:
		   Cut_Request_Flag = uart0RxStr[1]*256 + uart0RxStr[2];
		   u_Circle_Count = 0;
		   n_Speed_Desired = 800;
		   Motor_Drive_Set();
	       break;
	case 14:
		    u_Color_Select = uart0RxStr[1]*256 + uart0RxStr[2];
		   	Change_Request_Flag = 1;
	       break;
	}
}
//====================================================                                         
//Sub-routine Name:void Uart_TXD_Set(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================    
void Uart_TXD_Set(void)
{
if(Uart.TX_Flag > 0)
  {	
   Uart.TX_Flag = 0;
   uart0TxStr[0] = 0xaa;
   uart0TxStr[2] = 0;	
   uart0TxStr[3] = State.System;
   uart0TxStr[4] = 0;	
   uart0TxStr[5] = State.Normal;
   uart0TxStr[6] = 0;	
   uart0TxStr[7] = State.Run ;	
   uart0TxStr[8] = 0;	
   uart0TxStr[9] = Z_FBK.b.UP_Needle ;	
   uart0TxStr[10]= 0;	
   uart0TxStr[11] = Z_FBK.b.Run;
   uart0TxStr[12]= s_X_All_Step>>8;	
   uart0TxStr[13] = s_X_All_Step;	
   uart0TxStr[14]= s_Y_All_Step>>8;
   uart0TxStr[15] = s_Y_All_Step;
   uart0TxStr[16]= n_THETA>>8;	
   uart0TxStr[17] = n_THETA;	
   uart0TxStr[18]= (n_Z_Speed)>>8;
   uart0TxStr[19] = n_Z_Speed;
   uart0TxStr[20]= n_X_Reference>>8;
   uart0TxStr[21] = n_X_Reference;	
   uart0TxStr[22]= n_Y_Reference>>8;
   uart0TxStr[23] = n_Y_Reference;
   uart0TxStr[24]= u_Error_Flag>>8;
   uart0TxStr[25] = u_Error_Flag;
   uart0TxStr[26]= u_Over_Needle_Index>>8;
   uart0TxStr[27] = u_Over_Needle_Index;
   uart0TxStr[28]= Max_Speed_Limit>>8;
   uart0TxStr[29] = Max_Speed_Limit;	
   uart0TxStr[30]= (In_02 & Needle_Index)>>8;
   uart0TxStr[31] = (In_02 & Needle_Index);				
   u_Tx_Index = 0;
   rINTSUBMSK&=~(BIT_SUB_TXD0);		
  }		
} 
//====================================================                                         
//Sub-routine Name:void __sub_Uart0_RxErrInt(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================    
void __sub_Uart0_RxErrInt(void)
{
unsigned short u_Com_A;
    u_Com_A = rUERSTAT0;//to clear and check the status of register bits 
}
//====================================================                                         
//Sub-routine Name:void Uart_Control_Proc(void)                                                            
//Description: 
//                                                                                  
//Input:                                                                                     
//Output:                                                                               
//Modified:                                                        
//===================================================  
void Uart_Control_Proc(void)
{
  if((u_1ms_Flag & 0x02)==0)return;
  u_1ms_Flag &= ~(0x02);
  Uart_TXD_Set();	
  Uart_Unpack_Order();
  Uart_Uart0_Tx();
  Uart_Uart0_Rx();		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -