篇一:TIM&TAM产品介绍
1. 方案中的主要产品介绍
1.1. IBM Tivoli Identity Manager
1.1.1. IBM Tivoli Identity Manager概述
IBM Tivoli Identity Manager提供了一个安全、自动而且基于策略的用户管理解决方案,满足客户无论是在原有的IT环境还是电子商务时代的IT环境下将企业的核心业务展现给客户、供应商、合作伙伴甚至竞争对手的需求。在现有的业务流程中引入基于Web的管理和自助式服务接口的动机,反应了客户对简化及基于安全策略的自动化用户管理的需求。Tivoli Identity Manager包含一个工作流引擎,同时利用用户身份信息提供如审计、报告等功能。
IBM Tivoli Identity Manager既可以直接与用户交互,也可以与两种类型的外部系统-身份数据源和访问控制机制直接交互。身份系统管理需要在各个系统中建立帐号的用户身份的权威数据。发布系统与访问控制系统直接交互,从而建立用户帐号,提供用户信息以及密码,定义用户的授权信息。与之相反的是,在访问控制系统中进行的改动能够被发布系统所捕获并报告,然后按照安全策略对这些改动进行评估。
1.1.2. IBM Tivoli Identity Manager产品架构
IBM Tivoli Identity Manager的逻辑结构根据功能的不同设计为三层,如下图所示,各个组件分别为:
? Web用户界面层
? 应用层
? 服务层
? LDAP目录
? 数据库
? 资源连结器
图3-1 逻辑组件结构
1.1.2.1. Web用户界面层
Web用户界面模块是一组结合在一起的子程序,包括提供用户浏览器的内容和启动applet(同时在客户端和服务器端运行),如工作流设计和表单创建。Web用户界面是用户浏览器和身份管理应用层的连接层。
在上面的图中,用户交互点有三种类型:终端用户,监督员和管理员。这些类型仅仅是概念上的,因为IBM Tivoli Identity Manager允许您随意的定义各种权限的不同用户类型。
在上面的图中,指出的重要一点是系统的基础为系统用户功能的一般性概念。例如,假定管理员需要更高的权力,要求更高级的用户界面;假定监督人员需要稍微低一些的权力,但仍需要如组织图表之类的概念;最后,终端用户没有任何假定,显示给终端用户的接口必定是仅具有基本的、直接的功能接口。
1.1.2.2. 应用层
IBM Tivoli Identity Manager系统的核心正是应用层。应用层驻存于应用服务器中,提供了对其他所有进程对象的管理功能。
应用界面模块由所有的特定应用的用户界面组件构成。例如,该界面需要创建一个指派规则或者该模块中的一个帐户。这一模块可以使用Web用户界面子系统中的其他模块,例如表单提交和搜索模块。
1.1.2.3. 服务层
如果说IBM Tivoli Identity Manager服务器是一个为复杂规则所开发的应用,那么应用服务器就是运行这些规则或对象的引擎。它不仅与运行用户界面的Web服务器交互,还与从属于所管理服务的适配器、存储信息的目录服务器进行交互。
核心服务子系统包含了所有的模块,提供了可用于进行用户身份管理一般性服务,如认证、授权、工作流和规则执行。这些服务经常利用其他服务来达到目的。
1.1.3. IBM Tivoli Identity Manager产品功能
1.1.3.1. 集中式的帐户管理
IBM Tivoli Identity Manager 可以集中的为一个组织创建、管理、挂起和移除所有用户的帐户。从而降低各种用户帐号管理的成本。
1.1.3.2. 基于角色的用户管理和访问控制
基于角色的访问这一概念是指,利用个人的某些已知信息来决定赋予其相应的权利。IBM Tivoli Identity Manager将用户按照角色来管理。大多数情况下,一个角色代表着通用的职责。例如,可以在组织中创建一个会计的角色,使其能够访问所有的跟会计相关的应用和资源。同样职责的应用有银行机构中的信贷人员,或者保险公司中的理赔评估人等等。为用户分配角色可以是固定的,也可以是动态的。
固定:管理员必须手动的为每位用户添加相应的角色;
动态:按照一项或多项个人数据项(LDAP属性),为每位用户自动的添加角色。例如,所有的信贷人员都会依照他们的职位、部门编号或管理者的名字统一添加到一个信贷人员角色。
一旦某位用户被IBM Tivoli Identity Manager分配了一个特定的角色,也就会获得该角色相关的资源。在我们的解决方案中,角色或者是在我们产品中唯一的被创建,或者是从您公司的HR系统依照现存角色提取出的模型。
1.1.3.3. 委托管理
IBM Tivoli Identity Manager提供了委托管理功能。使用内置的访问控制项(Access Control Information,ACI)的策略,实现多方面的细粒度控制,如用户信息、报告和指派功能(策略、工作流、服务)、所有用户的身份属性和操作(移除、转移、搜索、恢复、挂起、添加和修改)的详细的GRANT和DENY选项。管理的范围是对系统中的所有用户,直至单个用户的级别。
例如,您可以创建一个服务台角色和一个安全管理员角色。服务台角色将被限制接入到机密或敏感信息,而安全管理员角色拥有全部权限。这些角色一旦被创建,您就可以管理相应的ACI。安全管理员角色将“允许”访问所有安全级别的信息。服务台角色将会被限制查看个人机密信息,但可以修改某些属性,如“职位”。
1.1.3.4. 用户自助式服务
IBM Tivoli Identity Manager 的自助服务功能非常有用。自助式服务功能使用户(和委托管理员)可以通过用户指派系统管理授权数据。利用角色和ACI规则,用户可以对其他用户和委托管理员指派特定的权限,对个人数据执行某特定操作,如添加或移除。通过自助式服务功能,授权用户可以自己重设密码,自助的注册以申请所要管理资源的访问权限。
1.1.3.5. 用户数据和密码的同步
IBM Tivoli Identity Manager与IBM Tivoli Directory Integrator结合在一起,提供对组织中所有被管理系统的用户帐户信息以及密码同步的能力。通过IBM Tivoli Identity Manager既可以保证企业内部用户信息的一致性,又可以保证用户密码的统一管理。经过
篇二:STM32F10x_TIM
19.1 TIM寄存器结构 ....................................................................242
19 通用定时器(TIM)
通用定时器是一个通过可编程预分频器驱动的16 位自动装载计数器构成。 它适用于多种场合,包括测量
输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。 使用定时器预分频器和RCC 时钟控制器预分频器,脉冲长度和波形周期可以在 几个微秒到几个毫秒间调整。
Section 19.1 TIM寄存器结构描述了固件函数库所使用的数据结构,Section 19.2 固件库函数介绍了函数库里的所有函数。
19.1 TIM寄存器结构
TIM 寄存器结构,TIM_TypeDeff,在文件“stm2f10x_map.h”中定义如下:
typedef struct {
vu16 CR1;
u16 RESERVED0; vu16 CR2;
u16 RESERVED1; vu16 SMCR;
u16 RESERVED2; vu16 DIER;
u16 RESERVED3; vu16 SR;
u16 RESERVED4; vu16 EGR;
u16 RESERVED5; vu16 CCMR1; u16 RESERVED6; vu16 CCMR2; u16 RESERVED7; vu16 CCER;
u16 RESERVED8; vu16 CNT;
u16 RESERVED9; vu16 PSC;
u16 RESERVED10; vu16 ARR;
u16 RESERVED11[3]; vu16 CCR1;
u16 RESERVED12; vu16 CCR2;
u16 RESERVED13; vu16 CCR3;
u16 RESERVED14; vu16 CCR4;
u16 RESERVED15[3]; vu16 DCR;
u16 RESERVED16; vu16 DMAR;
u16 RESERVED17; }TIM_TypeDef;
...
#define PERIPH_BASE ((u32)0x40000000) #define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) #define TIM2_BASE (APB1PERIPH_BASE + 0x0000) #define TIM3_BASE (APB1PERIPH_BASE + 0x0400) #define TIM4_BASE (APB1PERIPH_BASE + 0x0800) ...
#ifndef DEBUG ...
#ifdef _TIM2
#define TIM2 ((TIM_TypeDef *) TIM2_BASE) #endif /*_TIM2 */ #ifdef _TIM3
#define TIM3 ((TIM_TypeDef *) TIM3_BASE) #endif /*_TIM3 */ #ifdef _TIM4
#define TIM4 ((TIM_TypeDef *) TIM4_BASE) #endif /*_TIM4 */ ...
#else /* DEBUG */ ...
#ifdef _TIM2
EXT TIM_TypeDef *TIM2; #endif /*_TIM2 */ #ifdef _TIM3
EXT TIM_TypeDef *TIM3; #endif /*_TIM3 */ #ifdef _TIM4
EXT TIM_TypeDef *TIM4; #endif /*_TIM4 */ ... #endif
使用Debug模式时,初始化指针TIM2, TIM3和TIM4于文件“st32f10x_lib.c”:
...
#ifdef _TIM2
TIM2 = (TIM_TypeDef *) TIM2_BASE; #endif /*_TIM2 */ #ifdef _TIM3
TIM3 = (TIM_TypeDef *) TIM3_BASE; #endif /*_TIM3 */ #ifdef _TIM4
TIM4 = (TIM_TypeDef *) TIM4_BASE; #endif /*_TIM4 */ ...
为了访问 TIM 寄存器,, _TIM,_TIM2, _TIM3和_TIM4 必须在文件“stm2f10x_conf.h”中定义如下:
...
#define _TIM #define _TIM2 #define _TIM3 #define _TIM4 ...
19.2 TIM库函数
Table 458. TIM库函数【见首页】
19.2.1 函数TIM_DeInit
/* Resets the TIM2 */ TIM_DeInit(TIM2);
函数原型如下:
void TIM_DeInit(TIM_TypeDef* TIMx) {
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
//#define IS_TIM_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == TIM1_BASE) || ((*(u32*)&(PERIPH)) == TIM2_BASE) || \ // ((*(u32*)&(PERIPH)) == TIM3_BASE) || ((*(u32*)&(PERIPH)) == TIM4_BASE) || \ // ((*(u32*)&(PERIPH)) == TIM5_BASE) || ((*(u32*)&(PERIPH)) == TIM6_BASE) || \ // ((*(u32*)&(PERIPH)) == TIM7_BASE) || ((*(u32*)&(PERIPH)) == TIM8_BASE)) //TIMx_BASE值定义略。
switch (*(u32*)&TIMx){
case TIM1_BASE:
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);//T1/T8在APB2中,T2-7在APB1中 RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); //先置1,再清0 break;
//void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState);
/*【2】
void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState) {
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE) { RCC->APB2RSTR |= RCC_APB2Periph; }else { RCC->APB2RSTR &= ~RCC_APB2Periph; }}*/
case TIM2_BASE:
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); break;
/*【1】
void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState) {
/* Check the parameters */
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE) { RCC->APB1RSTR |= RCC_APB1Periph; }