5588葡京线路IBM Z/OS 操作系统学习笔记(持续更新)

LCR 线路控制寄存器

大凡用来IBM主机(大型服务器)操作系统的安康管理产品,OS/390同她的虚拟机操作系统。在大多数底局中RACF能于公司管理极特别的安康威胁:被自己员工破坏计算资源。由于他的第一次于公布是1976年,RACF屏蔽掉了巨大的熟悉他们之登陆识别的主机用户。
RACF只分红给来且采取申请资源的用户之微机体系(比如文件,打印序列,程序的运行空间等等)。为了贯彻这些,RACF识别并授权为一个用户,并控制是用户可使用什么的资源,并且针对非授权用户准备访问保护资源拓展记录日志与告诉。

工文件位置:

 

7.5念除数锁存器


/* 读博除数锁存器             */ 
183            //在LCR的DLAB=1的前提下念取DLL,DLM,然后去掉LCR的DLAB 
184            TEST_UART->LCR |=
UART_LCR_DLAB_EN;                          
185            GucDll          = TEST_UART->DLL;
186            GucDlm          = TEST_UART->DLM;
187            TEST_UART->LCR &= ~UART_LCR_DLAB_EN;


诵读除数锁存器的情节的前提是DLAB=1,读毕后到底零.

5588葡京线路 1

虚拟电信访问方法是一个IBM电信设备以及他们的用户之间的应用程序界面。VTAM是率先个会叫程序员把装备当成”逻辑单元”处理都不要理解线路协议和设备操作细节之IBM程序。在VTAM之前,程序员使用IBM的中心通信访问方法(BTAM)来与用二进制同步(BSC)和起止线路协议的装置

6.串口发送字符串


127   
/*********************************************************************************************************
128    ** Function name:       uartSendStr
129    ** Descriptions:        向串口发送字符串
130    ** input parameters:    pucStr:  要发送的字符串指针
131    ** output parameters:   无
132    ** Returned value:      无
133   
*********************************************************************************************************/
134    void uartSendStr (char *pcStr)
135    {
136        while (1){
137            if (*pcStr == ‘\0’)
break;                                      /*
遇到了符,退出             */
138            uartSendByte(*pcStr++);
139        }
140    }


串口发送字符串函数就是调用了串口发送字节函数.

这就是说归纳起来, 发送字符串—>发送字节–>UART_Send

 

5.串口发送字节数据uartSendByte


/*********************************************************************************************************
   115    ** Function name:       uartSendByte
   116    ** Descriptions:       
向串口发送字节数据,并等待数发送完,使用查询办法
   117    ** input parameters:    ucDat:   要发送的多寡
   118    ** output parameters:   无
   119    ** Returned value:      无
   120   
*********************************************************************************************************/
   121    void uartSendByte (uint8_t ucDat)
   122    {
   123        UART_Send(TEST_UART, &ucDat, 1,
UART_BLOKING_TIMEOUT);              /* 写副数据                    
*/
   124        while (!(UART_GetLineStatus(TEST_UART) &
UART_LS_TX_EMPTY_ALL));    /* 等待数据发送完             */
   125    }


 

得视,串口发送字节数据调用了UART_Send函数,

斯函数有三独参数:

  • 发送数据的串口
  • 出殡的数量内容(指针)
  • 发送至数码长度

归来 已经发送至字节数.

 

/\
  * @brief    Send a block of data via UART
peripheral通过串口外设发送一片数据.                   
  * @param UARTx   Selected UART used to send data, should be
LPC_UART0, LPC_UART1.串口号
  * @param txbuf   Pointer to Transmit buffer数据指针
  * @param buflen  Length of Transmit buffer, a multiple of 16 is
better.发送数据的长
  *                        16 is the best because the FIFO number is

  1.   * @param timeout     UART_process_time_delay definition 处理时延
      * @return  Number of bytes sent.返回已发送的bytes数.
      */
    uint32_t UART_Send(LPC_UART_TypeDef *UARTx, uint8_t *txbuf,
    uint32_t buflen,\
                           uint32_t timeout)
    {
        uint32_t bToSend, bSent, timeOut, fifo_cnt;
        uint8_t *pChar = txbuf;*

*    CHECK_PARAM(PARAM_UARTx(UARTx));
    CHECK_PARAM(PARAM_UART_PROCESS_DELAY(timeout));*

*    bToSend = buflen;*

*    bSent = 0;
    while (bToSend){
        timeOut = timeout;
        // Wait for THR empty with timeout
        while (!(UARTx->LSR & UART_LS_TX_EMPTY)) {
            if (timeOut == 0) break;
            timeOut–;
        }
        if(timeOut == 0) break;     // Time out!
        fifo_cnt = UART_TX_FIFO_SIZE;
        while (fifo_cnt && bToSend){
            UARTx->THR = ((*pChar++) & UART_THR_MASKBIT);
            fifo_cnt–;
            bToSend–;
            bSent++;
        }
    }
    return bSent;
}*

 

4.1弄错口初始化的约过程:

空串口配置结构体

空引脚配置结构体

IO引脚配置结构体初始化

为此引脚寄存器 给引脚配置结构体赋值,设置引脚为TXD、RXD.

依据串口号来:复位外设,配置外设时钟,设置分频系数.

复位串口,

拿转移的空结构体作为今天只要因此的串口的配置结构体.

串口配置结构体成员赋值.

串口发送使能

  SDSF控制面板提供了关于OS/390JES2网内的学业、打印机、队列以及资源的实时信息。从这些控制面板中,用户可输入SDSF命令或MVS与JES2命令来支配作业的运行与系统资源的操作。

 

 5588葡京线路 2

DLL  除数锁存器的低有效位 DLLSB

 VTAM

 

RACF(资源访问控制程序)

4.6因串口号来:复位外设,配置外设时钟,设置分频系数.


#if (UART_PORT ==
0)                                                    /*
打开UART时钟模块             */
    SYS_ResetPeripheral(SYS_PRESETCTRL_UART0_RST,DISABLE);   
//复位外设
    SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART0, ENABLE);        
//外设时钟配置   
    SYS_SetUART0ClockDiv(1);                               
//设置分频系数                
#endif

#if (UART_PORT == 1)
    SYS_ResetPeripheral(SYS_PRESETCTRL_UART1_RST,DISABLE);
    SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART1, ENABLE);
    SYS_SetUART1ClockDiv(1);
#endif


足见见这里有三单重要步骤:复位外设,外设时钟配置,设置分频系数.

复位外设

调用了SYS_ResetPeripheral函数,

/\*
  * @brief  Reset peripheral复位外设.
  *
  * @param  RSTBlock: Peripheral type 外设类型. 
  * @param  CmdState: Command State.  命令状态
  *         This parameter can be DISABLE or ENABLE.
  * @retval None.
  */
void SYS_ResetPeripheral(uint32_t RSTBlock, FunctionalState
CmdState)
{
    if (CmdState == ENABLE){
        LPC_SYSCON->PRESETCTRL &= ~(RSTBlock);
    } else {
        LPC_SYSCON->PRESETCTRL |= (RSTBlock);
    }
}*

外设时钟配置

调用了SYS_ConfigAHBCLK函数,

/\*
  * @brief  Disable or enable system and peripheral clock.
  *
  * @param  AHBClk_Type: AHB clock type.外设时钟类型
  * @param  CmdState: Enable or disable the clock for System or
  *                      peripheral blocks.  命令状态
  *         This parameter can be ENABLE or DISABLE. 
  * @retval None.
  */               
void SYS_ConfigAHBCLK(uint32_t AHBClk_Type, FunctionalState
CmdState)
{
    if(CmdState) LPC_SYSCON->SYSAHBCLKCTRL |= AHBClk_Type;
    else LPC_SYSCON->SYSAHBCLKCTRL &= ~(AHBClk_Type);
}*

安分频系数

调用了SYS_SetUART0ClockDiv函数

/\*
  * @brief  Set clock divider value for UART0.
  *
  * @param  DivNum: The divider for UART0 clock. 
  *         This parameter can be one of the following values:
  *             @arg 0: disable UART0
  *             @arg 1~255: Divided by this number
  * @retval None.
  *                FUART0 = FMainClk / DivNum
  */
void SYS_SetUART0ClockDiv(uint32_t DivNum)
{
    LPC_SYSCON->UART0CLKDIV = (DivNum & 0xFF);
}*

DivNum & 0xFF ,1 与0xFF,还是为1.

此服务重点是面向数据集的。这个组件全称应该是 data set
service。ABC书上说它们提供了以下部分效:数据的走及复制,空间管理,数据的备份和死灰复燃,数据集和卷曲(volume)之间的转移,分布式数据管理(与E
SS相关的飞复制功能,RAMAC Virtual
Array的快照功能)和并行复制。DFSMSdss是DFSMS最要的多少移动工具,依靠复制与动数据,存储、数据和空中的保管好进一步快捷。它可以高速的拿故DASD上之数码集移动及新的达标。DFSMSdss的多少移动对很多旁的操作都大有因此。
下面一一介绍下DFSMSdss可以的任务
数据的活动和复制:DFSMSdss可以为你在形似或未一般之装置上,移动或复制卷上之数据。如果你在DFSMSdss里创建了一个备份,你得复制这备份。DFSMSdss还得吃您在一个dump操作中创造大量之备份拷贝。
空间管理:它可以减去或免除DASD上的碎片空间,并提供压缩、释放功能。注意,它放的数码集里的悠闲空间,不是数码集我。
数据备份和回复:DFSMSdss同时提供数据集级别及卷级别的备份和恢复作用。它还隐含一个独立程序,用这次,即使host操作系统不存,你啊得运作它们。
数据集和卷曲的变换:
DFSMSdss可以将你的数据集和卷转换成为系统管理状态。作为恢复手续的一样部分,它还可将您的数目恢复成免系统管理。
分布式数据管理:在复制和移动操作着,DFSMSdss用一个一定的数据集保存分布式数据管理(DDM)的属性。它还提供面向ESS的flashcopy功能跟面向RVA(RAMAC
virtual
array)的快照。这点儿个效益可大面积数据处理,可以自动执行,因此比较传统艺术重新快。
并行复制:如果硬件支撑,DFSMSdss也提供并行复制。这样,即使以数在让用的时,也得让复制或备份。只要数据没有于更新,用户要应用程序就可以决定什么时起,把数据复制。

5588葡京线路 3

DFSMSdss

ACR 自动波特率控制寄存器

存储管理也是系的同一项中心服务。


SDSF是啊?它来什么用处?

3.用于计算和封存波特率的全局变量


59    uint8_t 
GucDlm;                                                        /*
用于保存波特率的除数寄存器值 */
60    uint8_t  GucDll;
61    uint32_t GulBaud;
62    char     GcStr[64];


GucDlm,GucDll,GulBauld,GcStr分别指向应DLM,DLL,BauldRate,最后发送的字符串.

存储管理软件组件(Data Facility Storage Management
Subsystem,DFSMS)可以助我们再次有效地展开系统存储的管制,它要由于四单有组成:
DFSMSdfp是一个多少、空间及装备的主干管理工具。它跟BCP一起构成了z/OS操作系统的根基。
DFSMSdss是一个数目及空中的管理工具,可以针对数据开展移动、复制、压缩等操作。
DFSMShsm
是一个存储管理工具,用于管理不欢的数码,在存储体系中改善DASD的用情况。
DFSMSrmm管理磁带及其记录的多寡。DFSMSrmm可以管理有的磁带介质及另可活动的介质,比如光盘,它可记下光盘架的职位,但非管理光盘的多少。

4.10对结构体成员赋值.更新配备参数


/* 更新配备参数                 */
    UART_SetConfig(TEST_UART, &UARTConfigStruct);  //对结构体成员赋值.


 

/\
  * @brief   Config the UARTx according to the specified parameters in
the UART_CFG_Type.
  * @param UARTx   UART peripheral selected, should be LPC_UART0,
LPC_UART1.
  * @param config    UART_ConfigStruct Pointer to a UART_CFG_Type
structure
  *                          that contains the configuration
information for the specified UART periphera.
  * @return  None
  */
void UART_SetConfig(LPC_UART_TypeDef *UARTx, UART_CFG_Type
*config)
{
    uint8_t tmp;*

*    CHECK_PARAM(PARAM_UARTx(UARTx));
    CHECK_PARAM(PARAM_UART_DATABIT(config->databits));
    CHECK_PARAM(PARAM_UART_PARITY(config->parity));
    CHECK_PARAM(PARAM_UART_STOPBIT(config->stopbits));
    CHECK_PARAM(PARAM_UART_FIFO_LEVEL(config->fifolevel));
    CHECK_PARAM(PARAM_UART_FIFO_DMA(config->fifodma));*

*    tmp = uart_get_num(UARTx);
   
    if(UART_Configration[tmp].baudrate != (*config).baudrate){
       
        uart_set_divisors(UARTx, (config->baudrate));       
        UART_Configration[tmp].baudrate =
(*config).baudrate;      
    }*

*    UARTx->LCR =
(((config->databits)|(config->parity)|(config->stopbits)|\
                 (config->txdbreak)) & UART_LCR_BITMASK);
  
    UARTx->FCR = ((UART_FCR_FIFO_EN |
(config->fifodma)|(config->fifolevel))&\
                   UART_FCR_BITMASK);*

*    UART_Configration[tmp].databits = (*config).databits;
    UART_Configration[tmp].stopbits = (*config).stopbits;
    UART_Configration[tmp].parity = (*config).parity;
    UART_Configration[tmp].txdbreak = (*config).txdbreak;
    UART_Configration[tmp].fifolevel = (*config).fifolevel;
    UART_Configration[tmp].fifodma = (*config).fifodma;*

*  
}*

 

 

 5588葡京线路 4

1.宏定义:


#define UART_LCR_DLAB_EN   
((uint8_t)(1<<7))                           /* 除数锁存位  
ox80                */
#define UART_ACR_START     
((uint32_t)(1<<0))                          /*
自动波特率启动各项   0x01          */


 

立马简单单宏定义分别对应之是

LCR 线路控制寄存器中之DLAB位(除数锁存器访问位(DLAB) 包含在LCR[7]
中,可实现对除数锁存器的顾。[斯位异常重大,从点的寄存器表的备考可以见见是位之状态是过剩操作的前提.])

ACR 自动波特率控制寄存器的SATRT位 (自动波特率启动各项)

 

  IBM的“系统来得与查询工具”(简称SDSF)是OS/390之可选产品,可以往用户提供大量的信息以扶植用户监测、管理暨控制MVS/JES2系。利用SDSF,用户可以:
  控制作业处理过程(保留,释放,取消和解除作业)
  对着周转的作业进展监测
  无需打印而浏览作业
  控制作业级别
  控制打印机、Punches、Readers与Initiators
  控制网络的连线与节点
  控制SPOOL的下载设备
  显示并操纵WLM安排的系环境以及资源
  执行对作业的JES2和MVS命令

4.3空IO引脚配置结构体


IOCON_PIO_CFG_Type PIO_mode;

typedef struct {
    uint16_t    type;     /*!< low 8 bits is address offset, other
is func >//低八各类是地方偏移,其余的凡效益函数
                                                 This parameter can be a
value of @ref PIO_type */
    uint8_t     pinmode;  /*!<  Pin mode >引脚模式
                                                 This parameter can be a
value of @ref PIO_pin_mode */
    uint8_t     invert;   /*!<  Inverted function >电平反转
                                                 This parameter can be a
value of @ref Invert_input_mode */
    uint8_t     ad;       /*!<  analog/digital mode >AD模数
                                                 This parameter can be a
value of @ref Analog_digital_mode */
    uint16_t    pmode;    /*!<  Push/pull mode for I2C
>I2C类型,上拉要么推挽.
                                                 This parameter can be a
value of @ref Push_Pull_mode */
    uint16_t    od;       /*!<  Open drive >开漏模式
                                                 This parameter can be a
value of @ref Open_drain_mode */
    uint16_t    drive;    /*!<  Pin driver function
>驱动电流模式
                                                 This parameter can be a
value of @ref Drive_current_mode */
    uint16_t    sm;       /*!<  Sample mode >采样模式
                                                 This parameter can be a
value of @ref Sample_mode */
    uint32_t    cd;       /*!<  Clock Divider
>选择用于输入滤波器采样时钟的外设时钟分频器
                                                 This parameter can be a
value of @ref clock_divider_num */
} IOCON_PIO_CFG_Type;


随意列举一个引脚寄存器的各位的表示,例如:PIO2_11

5588葡京线路 55588葡京线路 6

存储管理子系(DFSMS)

E:\Documents\program\Routine\example\LPC1220_UART\LPC1220_UART_AUTOBAUD\LPC1220_UART_AUTOBAUD.xmp

 

  1   
/****************************************Copyright
(c)****************************************************
  2    **                            Guangzhou ZLGMCU Development Co.,
LTD
  3    **
  4    **                                 http://www.zlgmcu.com
  5    **
  6    **————–File
Info———————————————————————————
  7    ** File name:           main.c
  8    ** Last modified Date:  2010-11-04
  9    ** Last Version:        V1.0
10    ** Descriptions:        The main() function example template
11    **
12   
**——————————————————————————————————–
13    ** Created by:          He Zengfu
14    ** Created date:        2010-11-20
15    ** Version:             V1.00
16    ** Descriptions:        整理模板,添加用户应用程序
17    **
18   
**——————————————————————————————————–
19    ** Modified by:         Wu Yuanlang
20    ** Modified date:       2010-12-20
21    ** Version:             V1.00
22    ** Descriptions:        编写UART自动波特率例程
23    **
24   
**——————————————————————————————————–
25    ** Modified by:         Wu yuanlang
26    ** Modified date:       2010-12-24
27    ** Version:             V1.00
28    ** Descriptions:       
检查、测试程序,并累加、修改注释和顺序风格
29    **
30    ** Rechecked by:
31   
*********************************************************************************************************/
32    #include “lpc12xx_libcfg.h”
33    #include “stdio.h”
34    #include “led.h”
35   
36   
/*********************************************************************************************************
37      宏定义
38   
*********************************************************************************************************/
39    #define UART_LCR_DLAB_EN   
((uint8_t)(1<<7))                           /* 除数锁存位  
ox80                */
40    #define UART_ACR_START     
((uint32_t)(1<<0))                          /*
自动波特率启动各项   0x01          */
41   
42    #define UART_PORT          
1                                           /* 定义使用的UART端口     
使用串口1     */
43   
44    //根据串口,选择适合的差口定义.
45    #if (UART_PORT == 0)
46    #define TEST_UART LPC_UART0
47    #define TEST_UART_RXD  IOCON_UART_RXD0_LOC0
48    #define TEST_UART_TXD  IOCON_UART_TXD0_LOC0
49   
50    #elif (UART_PORT == 1)
51    #define TEST_UART LPC_UART1
52    #define TEST_UART_RXD  IOCON_UART_RXD1_LOC0
53    #define TEST_UART_TXD  IOCON_UART_TXD1_LOC0
54    #endif
55   
56   
/*********************************************************************************************************
57      全局变量定义
58   
*********************************************************************************************************/
59    uint8_t 
GucDlm;                                                        /*
用于保存波特率的除数寄存器值 */
60    uint8_t  GucDll;
61    uint32_t GulBaud;
62    char     GcStr[64];
63   
64   
/*********************************************************************************************************
65    ** Function name:       uartInit
66    ** Descriptions:       
串口初始化,设置为8各数据位,1位停止位,无奇偶校验
67    ** input parameters:    无
68    ** output parameters:   无
69    ** Returned value:      无
70   
*********************************************************************************************************/
71    void uartInit (void)
72    {
73        UART_CFG_Type      UARTConfigStruct;
74        IOCON_PIO_CFG_Type PIO_mode;
75   
76        IOCON_StructInit(&PIO_mode);
77       
78       
79        /* 设置引脚为TXD、RXD功能 */
80        PIO_mode.type = TEST_UART_RXD;
81        IOCON_SetFunc(&PIO_mode);
82        PIO_mode.type = TEST_UART_TXD;
83        IOCON_SetFunc(&PIO_mode);
84       
85       
86          
87    #if (UART_PORT ==
0)                                                    /*
打开UART时钟模块             */
88        SYS_ResetPeripheral(SYS_PRESETCTRL_UART0_RST,DISABLE);   
//复位外设
89        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART0, ENABLE);        
//外设时钟配置   
90        SYS_SetUART0ClockDiv(1);                               
//设置分频系数                
91    #endif
92   
93    #if (UART_PORT == 1)
94        SYS_ResetPeripheral(SYS_PRESETCTRL_UART1_RST,DISABLE);
95        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART1, ENABLE);
96        SYS_SetUART1ClockDiv(1);
97    #endif
98       
99        UART_Init(TEST_UART);     
//初始化串口//复位串口                    /*
使能UART                     */
100   
101        /* 将参数赋值给UARTConfigStruct */   
102        UART_GetConfig(TEST_UART, &UARTConfigStruct);     
//将变的空结构体作为今天若是为此的串口的部署结构体.
103       
104         /* 设置为8位数据                */
105        UARTConfigStruct.databits = UART_CFG_DATABIT_8; 
//现在安排结构体:设置为8位数据.    
106       
107        /* 更新配备参数                 */
108        UART_SetConfig(TEST_UART, &UARTConfigStruct); 
//对结构体成员赋值.
109       
110        /* 使能发送功能                 */
111        UART_ConfigTXD(TEST_UART, ENABLE);               
//                              
112    }
113   
114   
/*********************************************************************************************************
115    ** Function name:       uartSendByte
116    ** Descriptions:       
向串口发送字节数据,并等待数发送完,使用查询办法
117    ** input parameters:    ucDat:   要发送的数量
118    ** output parameters:   无
119    ** Returned value:      无
120   
*********************************************************************************************************/
121    void uartSendByte (uint8_t ucDat)
122    {
123        UART_Send(TEST_UART, &ucDat, 1,
UART_BLOKING_TIMEOUT);              /* 写副数据                    
*/
124        while (!(UART_GetLineStatus(TEST_UART) &
UART_LS_TX_EMPTY_ALL));    /* 等待数据发送完             */
125    }
126   
127   
/*********************************************************************************************************
128    ** Function name:       uartSendStr
129    ** Descriptions:        向串口发送字符串
130    ** input parameters:    pucStr:  要发送的字符串指针
131    ** output parameters:   无
132    ** Returned value:      无
133   
*********************************************************************************************************/
134    void uartSendStr (char *pcStr)
135    {
136        while (1){
137            if (*pcStr == ‘\0’)
break;                                      /*
遇到了符,退出             */
138            uartSendByte(*pcStr++);
139        }
140    }
141   
142   
/*********************************************************************************************************
143    ** Function name:       main
144    ** Descriptions:        主函数(函数入口)
145    **     串口参数:      
UART波特率9600、8只数据位、1独已位、无奇偶校验位
146    **     跳线连接:      
P0.8(RXD1)、P0.9(TXD1)(若采用UART0则连续P0.1(RXD0)和P0.2(TXD0))通过232电平
147    **                     
转换芯片分别连接到PC机串口的TXD、RXD;
148    **     操作方法:      
打开串口调试软件,运行程序,下位机等待PC向串口发送字符’a’或’A’,观察显示窗口
149    **     现    象:       串口调试软件显示当前波特率
150    ** input parameters:    无
151    ** output parameters:   无
152    ** Returned value:      无
153   
*********************************************************************************************************/
154    int main (void)
155    { 
156       
SystemInit();                                                       /*
系统时钟初始化               */
157        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_IOCON,
ENABLE);                     /* IOCON模块时钟使能                */
158        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_GPIO1,
ENABLE);                     /* GPIO1时钟使能                */
159   
160       
ledInit();                                                          /*
LED初始化                    */
161   
162       
163        
uartInit();                                                         /* 
串口初始化                  */
164       
165        while (1) {
166           
167       
168                                                                           
/* 启动自动波特率               */
169            UART_StartAutoBaud(TEST_UART,
UART_CFG_AUTOBAUD_MODE0, UART_CFG_ABRESTART_ENABLE);
170           
171            /* 等待计算波特率完成           */
172            while (TEST_UART->ACR & UART_ACR_START)    //  
(ACR=1) 与    (UART_ACR_START=1)   
//在机关波特率功能了后,系统会清除UART_ACR_START此位。               
173            {
174            //等待的长河当中闪烁.   
175            ledOn();
176            myDelay(100);
177            ledOff();
178            myDelay(200);
179           
180            }
181               
182             /* 读博除数锁存器             */ 
183            //在LCR的DLAB=1的前提下读取DLL,DLM,然后去掉LCR的DLAB 
184            TEST_UART->LCR |=
UART_LCR_DLAB_EN;                          
185            GucDll          = TEST_UART->DLL;
186            GucDlm          = TEST_UART->DLM;
187            TEST_UART->LCR &= ~UART_LCR_DLAB_EN;
188           
189            /* 波特率计算,存在必然的误差   */   
190            //波特率计算公式:
UARTbaudrate=PCLK/(16*(256*DLM+DLL)*(1+DivAddVal/MulVal))
191            GulBaud    = (MainClock / (16 * (256 * GucDlm +
GucDll)));
192           
193            /* 处理要发送的多寡,然后为串口发送字符串            
*/
194            //函数原型int sprintf( char *buffer, const char *format
[, argument] … );
195            // (1)格式化字符串上。
196            //  (2)字符/Ascii 码对照
197            //   (3)连接字符串
198            //三只参数,保存数据的目的指针,格式,数据源指针.  
将数据源格式化保存至多少目的指针处.
199            sprintf(GcStr, ” Baud is %4d bps \n”, GulBaud);
200            uartSendStr(GcStr);               
201           
202        }  
203    }
204   
205    #ifdef  DEBUG
206   
/*********************************************************************************************************
207    ** Function name:       check_failed
208    ** Descriptions:
209    ** input parameters:    无
210    ** output parameters:   无
211    ** Returned value:      无
212   
*********************************************************************************************************/
213    void check_failed (uint8_t *file, uint32_t line)
214    {
215       
while(1);                                                           /*
Infinite loop                */
216    }
217   
218    #endif
219   
220   
/*********************************************************************************************************
221    End Of File
222   
*********************************************************************************************************/

系统存储管理子系(Storage Management
System,SMS)定义了网被的各种输入/输出设备,并决定这些装备的操作;同时,它还提供文件系统的基本功能,使用户可一本万利、快速地看数。系统的各种程序和数都封存在硬盘上,如果想尽某些程序,必须用到存储管理的服务,因此,SMS一般先为其他子系统启动,以供基本的存储管理服务。

对于串口的寄存器,先列表出来他们:

4.8将转移的空结构体作为今天使因此的串口的布结构体.


/* 将参数赋值给UARTConfigStruct */   
    UART_GetConfig(TEST_UART, &UARTConfigStruct);     
//将转的空结构体作为今天若是就此的串口的配备结构体.


/\
  * @brief     Get configuration the UARTx according to the specified
parameters in the UART_CFG_Type.
  *             将转的空结构体作为当今而就此之串口的布置结构体.
  * @param   UARTx   UART peripheral selected, should be LPC_UART0,
LPC_UART1.
  * @param   config    UART_ConfigStruct Pointer to a UART_CFG_Type
structure
  *                             that contains the configuration
information for the specified UART periphera.
  * @return    None
  */*

void UART_GetConfig(LPC_UART_TypeDef \UARTx, UART_CFG_Type
*config)
{
    uint32_t tmp;*

*    CHECK_PARAM(PARAM_UARTx(UARTx));
    tmp = uart_get_num(UARTx);
    *config = UART_Configration[tmp];
}*

7.主函数


142   
/*********************************************************************************************************
143    ** Function name:       main
144    ** Descriptions:        主函数(函数入口)
145    **     串口参数:      
UART波特率9600、8单数据位、1只已位、无奇偶校验位
146    **     跳线连接:      
P0.8(RXD1)、P0.9(TXD1)(若采用UART0则连续P0.1(RXD0)和P0.2(TXD0))通过232电平
147    **                     
转换芯片分别连接至PC机串口的TXD、RXD;
148    **     操作方法:      
打开串口调试软件,运行程序,下位机等待PC向串口发送字符’a’或’A’,观察显示窗口
149    **     现    象:       串口调试软件显示当前波特率
150    ** input parameters:    无
151    ** output parameters:   无
152    ** Returned value:      无
153   
*********************************************************************************************************/
154    int main (void)
155    { 

             
uartInit();                                                        
/*  串口初始化                  */

164       
165        while (1) {
166           
167       
168                                                                           
/* 启动自动波特率               */
169            UART_StartAutoBaud(TEST_UART,
UART_CFG_AUTOBAUD_MODE0, UART_CFG_ABRESTART_ENABLE);
170           
171            /* 等待计算波特率完成           */
172            while (TEST_UART->ACR & UART_ACR_START)    //  
(ACR=1) 与    (UART_ACR_START=1)   
//在机关波特率功能了晚,系统会清除UART_ACR_START此位。               
173            {
179           
180            }
181               
182             /* 读博除数锁存器             */ 
183            //在LCR的DLAB=1的前提下诵读取DLL,DLM,然后去掉LCR的DLAB 
184            TEST_UART->LCR |=
UART_LCR_DLAB_EN;                          
185            GucDll          = TEST_UART->DLL;
186            GucDlm          = TEST_UART->DLM;
187            TEST_UART->LCR &= ~UART_LCR_DLAB_EN;
188           
189            /* 波特率计算,存在必然的误差   */   
190            //波特率计算公式:
UARTbaudrate=PCLK/(16*(256*DLM+DLL)*(1+DivAddVal/MulVal))
191            GulBaud    = (MainClock / (16 * (256 * GucDlm +
GucDll)));
192           
193            /* 处理要发送的数,然后朝串口发送字符串            
*/
194            //函数原型int sprintf( char *buffer, const char
*format [, argument] … );
195            // (1)格式化字符串上。
196            //  (2)字符/Ascii 码对照
197            //   (3)连接字符串
198            //三个参数,保存数据的目的指针,格式,数据源指针.  
将数据源格式化保存到多少目的指针处.
199            sprintf(GcStr, ” Baud is %4d bps \n”, GulBaud);
200            uartSendStr(GcStr);               
201           
202        }  
203    }


4.4IO引脚布置结构体初始化


IOCON_StructInit(&PIO_mode);


此间调用了IOCON_StructInit函数,

void IOCON_StructInit ( IOCON_PIO_CFG_Type \mode)
{
   mode->type = 0x0;
   mode->pinmode = IOCON_PIO_MODE_PULLUP;
   mode->invert = IOCON_PIO_INV_NOT;
   mode->pmode = IOCON_PIO_PMODE_DISABLE;
   mode->od = IOCON_PIO_OD_DISABLE;
   mode->drive = IOCON_PIO_DRV_2MA_12MA;
   mode->ad = IOCON_PIO_AD_DIGITAL;
   mode->sm = IOCON_PIO_SMODE_BYPASS;
   mode->cd = IOCON_PIO_CLKDIV_0;
}*

可看看,此只是给空的IO引脚配置结构体赋值(相当给上电复位).

波特率的计算公式如下:

4.2空串口配置结构体


UART_CFG_Type      UARTConfigStruct;

 

typedef struct {
    uint32_t    baudrate;  /* !< UART baud rate */  波特率
    uint8_t     databits;  /* !< Number of data bits
                                            This parameter can be a
value of @ref UART_databit_type */ //数据位
    uint8_t     stopbits;  /* !< Number of stop bits 
                                            This parameter can be a
value of @ref UART_stopbit_type */ //停止位
    uint8_t     parity;    /* !< Parity selection 
                                            This parameter can be a
value of @ref UART_parity_type */ //优先级
    uint8_t     fifolevel; /* !< Rx FIFO trigger level 
                                            This parameter can be a
value of @ref FIFO_level_type */  //FIFO等级
    uint8_t     fifodma;   /* !< DMA mode 
                                            This parameter can be a
value of @ref FIFO_dmamode_type */ //FIFO直接内存读取
    uint8_t     txdbreak;  /* !< enable: TXD forceed to logic 0
                                            This parameter can be a
value of @ref TXD_break_forced_type */  //txdbreak 中断?
} UART_CFG_Type;


 

4.9差口配置结构体成员赋值.


/* 设置为8位数据                */
    UARTConfigStruct.databits = UART_CFG_DATABIT_8; 
//现在配备结构体:设置为8各类数据. 


main.c文件的情:

4.11差口发送使能


/* 使能发送功能                 */
    UART_ConfigTXD(TEST_UART, ENABLE);                // 


/\*
  * @brief    Enable/Disable transmission on UART TxD
pin使能有串口的殡葬引脚
  * @param UARTx   UART peripheral selected, should be LPC_UART0,
LPC_UART1
  * @param NewState New State of Tx transmission function, should be:
  *                            – ENABLE: Enable this function
  *                            – DISABLE: Disable this function
  * @return none
  */
void UART_ConfigTXD(LPC_UART_TypeDef *UARTx, FunctionalState
NewState)
{
    CHECK_PARAM(PARAM_UARTx(UARTx));
    if (NewState == ENABLE) {  
        UARTx->TER |= UART_TER_TXEN;        //相或置一   x|1 = 1
    }else{
        UARTx->TER &= (~UART_TER_TXEN) & UART_TER_BITMASK;
//(~1)&0x80 = 0.零与任意数相和为0;
    }
}*

2013年4月1日 0:

下详细分析这个函数和调用到之函数.

7.6计量波特率


/* 波特率计算,存在一定之误差   */   
   190            //波特率计算公式:
UARTbaudrate=PCLK/(16*(256*DLM+DLL)*(1+DivAddVal/MulVal))
   191            GulBaud    = (MainClock / (16 * (256 * GucDlm +
GucDll)));


测算波特率就一个公式:

5588葡京线路 7


2.串口引脚寄存器宏定义(起别名):


44    //根据串口,选择适合的失误口定义.
45    #if (UART_PORT == 0)
46    #define TEST_UART LPC_UART0
47    #define TEST_UART_RXD  IOCON_UART_RXD0_LOC0
48    #define TEST_UART_TXD  IOCON_UART_TXD0_LOC0
49   
50    #elif (UART_PORT == 1)
51    #define TEST_UART LPC_UART1
52    #define TEST_UART_RXD  IOCON_UART_RXD1_LOC0
53    #define TEST_UART_TXD  IOCON_UART_TXD1_LOC0
54    #endif


是因为来三三两两独串口,所以经串口的选项来定义相关的引脚寄存器

7.1主函数根本流程

  1. 1.串口初始化uartInit();    
  2. 2.开行自动波特率UART_StartAutoBaud
  3. 3.等待
  4. 4.读除数锁存器
  5. 5.算波特率
  6. 6.拍卖要发送字符串
  7. 7.根据波特率发送字符串

7.7拍卖带来发送的字符串

此将显示的字符串进行拍卖,显示波特率参数.


/* 处理要发送的数据,然后朝串口发送字符串             */
   194            //函数原型int sprintf( char *buffer, const char
*format [, argument] … );
   195            // (1)格式化字符串上。
   196            //  (2)字符/Ascii 码对照
   197            //   (3)连接字符串
   198            //三独参数,保存数据的目的指针,格式,数据源指针.  
将数据源格式化保存及数目的指针处.
   199            sprintf(GcStr, ” Baud is %4d bps \n”, GulBaud);


最主要是sprintf函数的使用.

俺们这里运用的是,将格式化后的字符串保存及GcStr中.

用参数GulBaud 填充%4d,那么源字符串 “Baud is %4d
bps\n”,经过参数GulBaud填充后,变成了盖9600横底数据.

末了输出

Baud is 9615 bps

俺们之所以的要是

DLM 除数锁存器的参天有效位 DLMSB

4.5为此引脚寄存器 给引脚配置结构体赋值,设置引脚为TXD、RXD.


/* 设置引脚为TXD、RXD功能 */
    PIO_mode.type = TEST_UART_RXD;
    IOCON_SetFunc(&PIO_mode);
    PIO_mode.type = TEST_UART_TXD;
    IOCON_SetFunc(&PIO_mode);


得看来通过为IO引脚配置寄存器结构体赋值累配置为TXD或者RXD

此调用了IOCON_SetFunc函数

void IOCON_SetFunc ( IOCON_PIO_CFG_Type \mode)
{
    uint32_t offset;
    uint32_t func; 
    uint32_t tmp;
    uint32_t *p = (uint32_t *)&LPC_IOCON->PIO2_28;*

*    CHECK_PARAM( PARAM_IOCON_PIO_TYPE(mode->type) );
    CHECK_PARAM( PARAM_IOCON_PIO_MODE(mode->pinmode));
    CHECK_PARAM( PARAM_IOCON_PIO_DRV(mode->drive) );
    CHECK_PARAM( PARAM_IOCON_PIO_AD(mode->ad) );
    CHECK_PARAM( PARAM_IOCON_PIO_OD(mode->od));  
    CHECK_PARAM( PARAM_IOCON_PIO_INV(mode->invert) );
    CHECK_PARAM( PARAM_IOCON_PIO_SMODE(mode->sm));
    CHECK_PARAM( PARAM_IOCON_PIO_CLKDIV(mode->cd));*

*    offset = (mode->type >> 6);
    func = (mode->type & 0xf);*

*    if(offset == 0x24 || offset == 0x25){ //0x90, 0x94 right shift 2
bit
       tmp =
(uint32_t)(func|(mode->pmode)|(mode->od)|(mode->invert)|(mode->sm)|(mode->cd));*

*    }else{
       tmp =
(uint32_t)(func|(mode->pinmode)|(mode->drive)|(mode->ad)|(mode->od)|(mode->invert)|(mode->sm)|(mode->cd));
    }
    *(uint32_t *)(p + offset) = tmp;
}*

针对诺吃IO引脚配置寄存器的Func域.

5588葡京线路 8

FDR 小数分频寄存器

7.8拧口根据波特率发送数据


uartSendStr(GcStr);   


uartSendStr上面都摆了了,见”6.串口发送字符串”

整时间

2013年4月1日 13:40:22


7.4候系统清除UART_ACR_START


171            /* 等待计算波特率完成           */
  172            while (TEST_UART->ACR & UART_ACR_START)    //  
(ACR=1) 与    (UART_ACR_START=1)   
//在自行波特率功能了后,系统会清除UART_ACR_START此位。               


如果发生1单0,那么就是跳出循环.

为0的意思就是是全自动波特率停止.

2013年3月31日 17:00:11

7.2弄错口初始化

串口初始化已经于上头说过了,见”4.串口初始化过程”部分

5588葡京线路 9

4.串口初始化过程


64   
/*********************************************************************************************************
    65    ** Function name:       uartInit
    66    ** Descriptions:       
串口初始化,设置为8各项数据位,1位停止位,无奇偶校验
    67    ** input parameters:    无
    68    ** output parameters:   无
    69    ** Returned value:      无
    70   
*********************************************************************************************************/
    71    void uartInit (void)
    72    {
    73        UART_CFG_Type      UARTConfigStruct;
    74        IOCON_PIO_CFG_Type PIO_mode;
    75   
    76        IOCON_StructInit(&PIO_mode);
    77       
    78       
    79        /* 设置引脚为TXD、RXD功能 */
    80        PIO_mode.type = TEST_UART_RXD;
    81        IOCON_SetFunc(&PIO_mode);
    82        PIO_mode.type = TEST_UART_TXD;
    83        IOCON_SetFunc(&PIO_mode);
    84       
    85       
    86          
    87    #if (UART_PORT ==
0)                                                    /*
打开UART时钟模块             */
    88       
SYS_ResetPeripheral(SYS_PRESETCTRL_UART0_RST,DISABLE);   
//复位外设
    89        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART0, ENABLE);        
//外设时钟配置   
    90        SYS_SetUART0ClockDiv(1);                               
//设置分频系数                
    91    #endif
    92   
    93    #if (UART_PORT == 1)
    94       
SYS_ResetPeripheral(SYS_PRESETCTRL_UART1_RST,DISABLE);
    95        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_UART1, ENABLE);
    96        SYS_SetUART1ClockDiv(1);
    97    #endif
    98       
    99        UART_Init(TEST_UART);     
//初始化串口//复位串口                    /*
使能UART                     */
   100   
   101        /* 将参数赋值给UARTConfigStruct */   
   102        UART_GetConfig(TEST_UART, &UARTConfigStruct);     
//将转的空结构体作为当今若就此的串口的安排结构体.
   103       
   104         /* 设置为8位数据                */
   105        UARTConfigStruct.databits = UART_CFG_DATABIT_8; 
//现在部署结构体:设置也8各类数据.    
   106       
   107        /* 更新配备参数                 */
   108        UART_SetConfig(TEST_UART, &UARTConfigStruct); 
//对结构体成员赋值.
   109       
   110        /* 使能发送功能                 */
   111        UART_ConfigTXD(TEST_UART, ENABLE);               
//                              
   112    }



4.7复位串口,


UART_Init(TEST_UART);      //初始化串口//复位串口                   
/* 使能UART                     */


调用了UART_Init函数

/\
  * @brief       Initializes the UARTx
peripheral.初始化串口外设.//初始化可以领略也重新位么?
  * @param    UARTx   UART peripheral selected, should be LPC_UART0,
LPC_UART1.取舍的串口(LPC_UART0或者LPC_UART1)
  * @return     None
  */
void UART_Init(LPC_UART_TypeDef *UARTx)
{
    volatile uint32_t tmp;       
//volatile关键字之用意是防止编译器对歌词条告句子进行优化.
    CHECK_PARAM(PARAM_UARTx(UARTx));*

*    UARTx->FDR = 0x10;           //set to default value: 0x10
小数分频寄存器。生成波特率分频器的钟表输入*

*    /* Empty the registers */
    UARTx->FCR = ( UART_FCR_FIFO_EN | UART_FCR_RX_RS |
UART_FCR_TX_RS);*

*    while (UARTx->LSR & UART_LS_RX_DATA_READY){
        tmp = UARTx->RBR;        // Dummy reading
    }*

*    UARTx->TER = UART_TER_TXEN;
    while (!(UARTx->LSR & UART_LS_TX_EMPTY));  // Wait for current
transmit complete*

*    UARTx->TER = 0;             // Disable Tx
    UARTx->IER = 0;             // Disable interrupt
    UARTx->LCR = 0;             // Set LCR to default state
    UARTx->ACR = 0;             // Set ACR to default state
   
    if (UARTx == LPC_UART0){  
#ifdef _MODEM       
        UARTx->MCR = 0;         // Set Modem Control to default
state
        tmp = UARTx->MSR;       // Dummy Reading to Clear Status
#endif       
#ifdef _RS485       
        UARTx->RS485CTRL = 0;   // Set RS485 control to default
state
        UARTx->ADRMATCH = 0;    // Set RS485 addr match to default
state
        UARTx->RS485DLY = 0;    // Set RS485 delay timer to default
state
#endif       
    }
#ifdef _IRDA
    else{
   
        UARTx->ICR = 0;         // Set IrDA to default state
    }
#endif
    tmp = UARTx->LSR;           // Dummy reading*

*    tmp = uart_get_num(UARTx);*

*    UART_Configration[tmp].baudrate = 0;
    UART_Configration[tmp].databits = UART_CFG_DATABIT_8;
    UART_Configration[tmp].stopbits = UART_CFG_STOPBIT_1;
    UART_Configration[tmp].parity = UART_CFG_PARITY_NONE;
    UART_Configration[tmp].fifolevel = UART_CFG_FIFOTRG_1;
    UART_Configration[tmp].fifodma = UART_CFG_DMAMODE_DISABLE;
    UART_Configration[tmp].txdbreak = UART_CFG_TXDBREAK_DISABLE;*

}

 

 

7.3起步自动波特率


/*
  * @brief     Start Auto Baudrate activity启动自动波特率活动:配置
  * @param  UARTx   UART peripheral selected, should be LPC_UART0,
LPC_UART1
  * @param  mode    UART_auto_baudrate_mode_type
串口自动波特率模式类型
  * @param  restart   UART_auto_baudrate_restart_type
definitions串口自动波特率复位类型
  * @return   none
  */
void UART_StartAutoBaud(LPC_UART_TypeDef *UARTx, uint8_t mode,
uint8_t restart)
{
    CHECK_PARAM(PARAM_UARTx(UARTx));
    CHECK_PARAM(PARAM_UART_AB_MODE(mode));
    CHECK_PARAM(PARAM_UART_AB_RESTART(restart));      
   
    // Clear DLL and DLM value
    //在UART_LCR_DLAB_EN置一的前提下,清除DLL和DLM,LCR.
    UARTx->LCR |= UART_LCR_DLAB_EN; //
按位或置一,UART_LCR_DLAB_EN 串口线路控制器除数锁存器访问位 置一
    UARTx->DLL = 0;                    //DLL 除数锁存器
最低有效字节.
    UARTx->DLM = 0;                    //DLM
除数锁存器最高有效字节.
    UARTx->LCR &= ~UART_LCR_DLAB_EN;//LCR
决定使发送或接收的数码字符的格式.清除LCR=0.
   
    // FDR value must be reset to default value
    UARTx->FDR = 0x10;//FDR=xxxx xxxx MULVAL
DIVADDVAL;这里最后四员也0,说明禁用了小数分频;如果DIVADDVAL为0,那么小数分频器将给受用,并且不会见对时钟进行分频。
    UARTx->ACR = (UART_ACR_START | (mode) |
(restart));//自动波特率控制器ACR=UART_ACR_START 或 mode 或
重开动.如果最终是1,那么就算活动波特率启动.


好看来,自动波特率设置 主要是

  1. 1.拔除除数锁存器
  2. 2.禁止小数分频器
  3. 3.起步自动波特率位.