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

📄 tools.c

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 C
字号:
//*----------------------------------------------------------------------------
//*      ATMEL Microcontroller Software Support  -  ROUSSET  -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name           : tools.c
//* Object              : tools for get triminal information
//*
//* 1.0 25/08/00 JPP    : Creation
//*----------------------------------------------------------------------------

#include <stdio.h>
#include "lib_tools.h"
#include "parts/m55800/lib_m55800.h"

//* Global Variable
extern char message[512];
extern manage_timer timer_base;
//*----------------------------------------------------------------------------
//* Function Name       : get_timer_id
//* Object              : Get timer desc information
//* Input Parameters    : trigger selection pointer
//* Output Parameters   : Timer descriptor
//*----------------------------------------------------------------------------
const TCDesc * get_timer_id( int * trig_selection)
{
    int read;
    const TCDesc *TC_choise;
     at91_print(&COM,"Timer 0 to 5:");
     at91_scanf(&COM,"%d", &read);
     at91_print(&COM,"\n\r");
     switch(read)
    {
        case 0:
         TC_choise = &TC0_DESC;
         *trig_selection = ADC_TRG_TIOA0;
        break;
        case 1:
         TC_choise = &TC1_DESC;
         *trig_selection = ADC_TRG_TIOA1;
        break;
        case 2:
         TC_choise = &TC2_DESC;
         *trig_selection = ADC_TRG_TIOA2;
        break;
        case 3:
         TC_choise = &TC3_DESC;
         *trig_selection = ADC_TRG_TIOA3;
        break;
        case 4:
         *trig_selection = ADC_TRG_TIOA4;
         TC_choise = &TC4_DESC;
        break;
        case 5:
         *trig_selection = ADC_TRG_TIOA5;
         TC_choise = &TC5_DESC;
        break;
    default:         /*  invalid command  */
        TC_choise = 0x0000;
        *trig_selection = ADC_TRG_EXT;
       break;
    }
    return  TC_choise;
}
//*----------------------------------------------------------------------------
//* Function Name       : get_timer_manage
//* Object              : set the descriptor with the num timer
//* Input Parameters    : none
//* Output Parameters   : set global variable timer_base
//*----------------------------------------------------------------------------
void  get_timer_manage( void)
{
     at91_print(&COM,"ADC 0");
     timer_base.TC_adc0= get_timer_id(&timer_base.trig_selection_adc0);
     at91_print(&COM,"ADC 1");
     timer_base.TC_adc1= get_timer_id(&timer_base.trig_selection_adc1);
     at91_print(&COM,"DAC 0");
     timer_base.TC_dac0= get_timer_id(&timer_base.trig_selection_dac0);
     at91_print(&COM,"DAC 1");
     timer_base.TC_dac1= get_timer_id(&timer_base.trig_selection_dac1);
}
//*----------------------------------------------------------------------------
//* Function Name       : print_timer_manage
//* Object              : Print num timer
//* Input Parameters    : desc timer
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void print_one_timer(const TCDesc *TC_choise)
{
    if (TC_choise == &TC0_DESC)
        at91_print(&COM,"0");
    if (TC_choise == &TC1_DESC)
        at91_print(&COM,"1");
    if (TC_choise == &TC2_DESC)
        at91_print(&COM,"2");
    if (TC_choise == &TC3_DESC)
        at91_print(&COM,"3");
    if (TC_choise == &TC4_DESC)
        at91_print(&COM,"4");
    if (TC_choise == &TC5_DESC)
        at91_print(&COM,"5");
    if (TC_choise == 0x0)
        at91_print(&COM,"External timer");
 }

//*----------------------------------------------------------------------------
//* Function Name       : print_timer_manage
//* Object              : Print trimers configuration
//* Input Parameters    : none
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void  print_timer_manage( void)
{
      at91_print_crlf(&COM);
      at91_print(&COM,"ADC 0 Timer:");
      print_one_timer(timer_base.TC_adc0);
      at91_print_crlf(&COM);
      at91_print(&COM,"ADC 1 Timer:");
      print_one_timer(timer_base.TC_adc1);
      at91_print_crlf(&COM);
      at91_print(&COM,"DAC 0 Timer:");
      print_one_timer(timer_base.TC_dac0);
      at91_print_crlf(&COM);
      at91_print(&COM,"DAC 1 Timer:");
      print_one_timer(timer_base.TC_dac1);
      at91_print_crlf(&COM);
}

//*----------------------------------------------------------------------------
//* Function Name       : get_timer_mode
//* Object              : Get ADC information mode and channel
//* Input Parameters    : mode pointer and channel pointer
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void get_timer_mode( int *tioc, int *tc_div )
{
     at91_print(&COM,"Timer val:");
     at91_scanf(&COM,"%d", tioc);
     at91_print_crlf(&COM);

     sprintf(message,"Div MCKI val: %d / 0=> div 2, 1 => div8, 2 => div32, 3 => div128 , 4 => div1024 \n\r",*tc_div);
     at91_print(&COM,message);
     at91_scanf(&COM,"%d", tc_div);
     *tc_div &= TC_CLKS;
     at91_print_crlf(&COM);
}

//*----------------------------------------------------------------------------
//* Function Name       : print_timer_mode
//* Object              : print adc mode
//* Input Parameters    : String pointer
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void print_timer_mode(int tioc,int tc_div)
{

     sprintf(message,"Timer val: %d Hex:%04X \n\r",tioc,tioc);at91_print(&COM,message);
     sprintf(message,"Div MCKI val: %d / 0=> div 2, 1=> div8, 2=> div32, 3=> div128, 4=> div1024\n\r",tc_div);at91_print(&COM,message);
     if ( tc_div == TC_CLKS_MCK2)
        at91_print(&COM," MCKI / 2") ;
     else if ( tc_div == TC_CLKS_MCK8)
        at91_print(&COM," MCKI / 8");
     else if ( tc_div == TC_CLKS_MCK32)
        at91_print(&COM," MCKI / 32");
     else if ( tc_div == TC_CLKS_MCK128)
        at91_print(&COM," MCKI / 128");
     else if ( tc_div == TC_CLKS_MCK1024)
        at91_print(&COM," MCKI / 1024");
     else
        at91_print(&COM," unknown");
     at91_print_crlf(&COM);
}

//*----------------------------------------------------------------------------
//* Function Name       : get_adc_mode
//* Object              : Get ADC information mode and channel
//* Input Parameters    : mode pointer and channel pointer
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void get_adc_mode( int *adc_mode,int *adc_channel )
{
    int read;
        //* Get Resolution
        at91_print(&COM,"Reslution 0 for 10 bits or 1 for 8 bits:");
        at91_scanf(&COM,"%d", &read);
        if ( read != 0 )
            * adc_mode |= ADC_8_BIT_RES;
        else
            * adc_mode &= ~ADC_8_BIT_RES;
        //* Get Presacler
        at91_print(&COM,"\n\rPresacler ADC channel 0 to 63:");
        at91_scanf(&COM,"%d", &read);
        *adc_mode &= ~ADC_PRESCAL;
        *adc_mode |= (read << ADC_B_PRESCAL)& ADC_PRESCAL;

         at91_print(&COM,"\n\rSelect ADC adc_channel 0 to F (1 for channel 0) (Hex):");
         at91_scanf(&COM,"%X", adc_channel);
         at91_print_crlf(&COM);
}
//*----------------------------------------------------------------------------
//* Function Name       : print_adc_mode
//* Object              : print adc mode
//* Input Parameters    : String pointer
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void print_adc_mode(int adc_mode,int adc_channel)
{
    int val;
     sprintf(message," ADC_MR Mode register 0x%08X \n\r",adc_mode);at91_print(&COM,message);
     if ( (adc_mode & ADC_8_BIT_RES)== ADC_8_BIT_RES )
     {
         at91_print(&COM," ADC in 8 bits mode \n\r");
     }
     else
     {
         at91_print(&COM," ADC in 10 bits mode \n\r");
     }
     val = (adc_mode & ADC_PRESCAL);
     sprintf(message," presacler %d : \n\r",(val >> ADC_B_PRESCAL));at91_print(&COM,message);
     sprintf(message," Chanel active 0x%04X \n\r",adc_channel);at91_print(&COM,message);
}

⌨️ 快捷键说明

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