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

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
📖 第 1 页 / 共 2 页
字号:
            UARTCharNonBlockingPut(UART0_BASE, *Buffer++);              /*  发送一个字符到存储位置      */
		    NByte--;
	    }
    }
}

/*********************************************************************************************************
** Function name:     main
** Descriptions:      主函数:初始化操作系统,创建卡操作任务和启动操作系统。
** input parameters:  无
** output parameters: 无
** Returned value:    0
*********************************************************************************************************/
int main (void)
{
    intDisAll();                                                        /*  关闭所有中断                */

    OSInit();                                                           /*  初始化uC/OS-II的内核        */

    OSTaskCreate ( Task_Card,                                           /*  创建卡操作任务              */
                  (void *)0, 
                  &Task_CardStk[TASK_CARD_STK_SIZE - 1], 
                  TASK_CARD_PRIO );
				     
    OSStart();                                                          /*  启动uC/OS-II                */

    return(0);
}

/*********************************************************************************************************
** Function name:     Task_Card
** Descriptions:      对SD卡进行操作
** input parameters:  *p_arg
** output parameters: 无
** Returned value:    无
*********************************************************************************************************/
static  void  Task_Card (void  *p_arg)
{
    INT8U  *pRec;
    INT8U  err;
    INT32U bufaddr, blockaddr, blocknum; 

    (void)p_arg;

    Uart0ReviceMbox = OSMboxCreate(NULL);                               /*  建立邮箱                    */
    if (Uart0ReviceMbox == NULL) {                                      /*  判断邮箱是否建立成功        */
        while (1) {
            ;
        }
    }
    targetInit();                                                       /*  初始化目标单片机            */

#if OS_TASK_STAT_EN > 0
    OSStatInit();                                                       /*  使能统计功能                */
#endif

																		
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);                        /*  使能GPIOA                   */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);                        /*  使能GPIOE                   */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);                        /*  使能GPIOG                   */

    GPIO_SET();                                                         /*  配置GPIO口                  */
                                                                        /*  初始化串口                  */
    uart0init(115200, 3);
			        
    SSIInit();                                                          /*  SSI初始化                   */

    while (1) {  
     	pRec = (INT8U *)OSMboxPend(Uart0ReviceMbox, 0, &err);           /*  接收数据                    */
        switch(pRec[0]) {
	
        case CMD_SD_INIT: pRec[1] = SD_Initialize();	                /*  初始化卡                    */
            break; 
		
        case CMD_SD_READ:
            blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +             /*  计算块地址                  */
            (pRec[3] << 8) + pRec[4];
            pRec[1] = SD_ReadBlock(blockaddr, sd_buf);                  /*  卡单块读                    */ 			
            break;
		 	    		
        case CMD_SD_WRITE:	 
            blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +             /*  计算块地址                  */
		        (pRec[3] << 8) + pRec[4];
            pRec[1] = SD_WriteBlock(blockaddr, sd_buf);                 /*  卡单块写                    */
            break;
			
        case CMD_SD_ERASE:	 
            blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + 
            (pRec[3] << 8) + pRec[4];                                   /*  擦卡起始地址                */
            blocknum  = (pRec[5] << 16) + (pRec[6] << 8) +	
				 	    (pRec[7]);                                      /*  块数                        */
            pRec[1] = SD_EraseBlock(blockaddr, blocknum);               /*  擦除操作                    */
            break;
		
        case CMD_DATA_RECV:	 
            bufaddr = (pRec[1] << 8) + pRec[2];                         /*  计算缓冲区地址              */
		       memcpy(sd_buf + bufaddr, &pRec[3], 5);                   /*  收到数据放入pRec            */
            break;
			
        case CMD_DATA_TRANS: 
            bufaddr = (pRec[1] << 8) + pRec[2];                         /*  计算缓冲区地址              */ 
            memcpy(&pRec[1], sd_buf + bufaddr, 7);                      /*  sd_buf数据放入pRec          */
            break;  							
	
        default: 
            break;
    	}
    	
    	uart0send(pRec, 8);                                             /*  发送响应帧                  */
    }
}
/*********************************************************************************************************
** Function name:     uart0_ISR
** Descriptions:      串口中断函数,通过接收中断将接收到的数据以消息邮箱的形式发送出去。
** input parameters:  无
** output parameters: 无
** Returned value:    无
*********************************************************************************************************/
void uart0_ISR(void)
{
    unsigned long ulStatus;
    static char Buf[8];
    INT8U i = 0;
	
    #if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
    #endif 
	
    OS_ENTER_CRITICAL();                                                /*  关中断                      */
    OSIntNesting++;                                                     /*  操作系统中断嵌套层数加1     */
    OS_EXIT_CRITICAL();                                                 /*  开中断                      */
	
    ulStatus = UARTIntStatus(UART0_BASE, true);                         /*  读取已使能的串口0中断状态   */
    UARTIntClear(UART0_BASE, ulStatus);                                 /*  清除当前的串口0中断         */
	
    if ((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT)) {         /*  判断是否有接收中断	        */
        while (UARTCharsAvail(UART0_BASE)) {                            /*  判断FIFO是否有数据          */
            Buf[i] = UARTCharNonBlockingGet(UART0_BASE);                /*  串口接收数据                */
            i++;
            if (i == 8) {
                OSMboxPost(Uart0ReviceMbox, (void *)Buf);               /*  发送消息邮箱                */
                i = 0;
            }
        }
    }
    OSIntExit();
}

/*********************************************************************************************************
 END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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