[] Sistema operativo embebido-Non puerto GPIO y la programación del controlador de la lámpara LED

controlador GPIO

contorno

S3C6410 total de IO puerto 187, está dividido en 17 PORT, cada uno del puerto IO pueden usarse en los pasadores de línea de entrada, los pines de salida y otras líneas de alambre pasador de función, se pueden disponer por cada puerto de registro de control propia función . Aquí Insertar imagen Descripción
'Aquí Insertar imagen Descripción

La arquitectura interna

  • controlador GPIO colgando bus APB, que pertenece al dispositivo de baja velocidad.
  • El controlador incluye un archivo de registro y el circuito funcional correspondiente compuesto del circuito funcional puede ser controlado por el usuario de acuerdo con la forma registros de trabajo.
  • controlador entero incluyendo Alive-Parte , OFF-Parte dos porciones, a excepción de que si hay una fuente de alimentación cuando el MODO SLEEP , la alimentación se suministra cuando vivo-parte, de manera que el puerto se puede utilizar como una llamada de -up estela señal
    Aquí Insertar imagen Descripción

registro puerto

GPIO Registro de Control

  • Configuración de la función de puerto correspondiente - Función

Aquí Insertar imagen Descripción

GPIO Registro de Datos

  • registro de datos de bits correspondiente a cada línea de bit del puerto correspondiente IO
  • Si la línea IO se utiliza como entrada pasadores, pasadores con los cambios de nivel de línea de cambio (que corresponde a un valor de 0 o 1) por un único bit;
  • Si la línea IO se utiliza como salida de pin, a continuación, el valor de bit es 1 bit , el cable conductor exterior correspondiente es alta (típicamente de aproximadamente 3,3 V), entonces el bit cuando el bit es 0 , el plomo exterior correspondiente línea de pie es bajo (típicamente ligeramente mayor que 0 V)

Aquí Insertar imagen Descripción

Pull-up registro GPIO

  • Este registro puede cocinar para tirar de brazo o desplegable io algún tratamiento especial, que en algunos casos es muy útil para evitar el pull-up o resistencia pull-down en el PCB, el diseño del circuito se puede simplificar externa

Aquí Insertar imagen Descripción

LED parpadea no OS

pasos de desarrollo

  1. Entienda la tabla de hardware
  2. escritura de la unidad
  3. aplicaciones de grabación
  4. El uso de herramientas
  5. depuración del sistema
    Aquí Insertar imagen Descripción

diodo placa de desarrollo

Aquí Insertar imagen Descripción

Leer diagramas de circuitos

S3C6410 manual de viruta

Aquí Insertar imagen Descripción

programa marco

  • compilación
;asses.s内容
	AREA Init, CODE READONLY
	ENTRY
_start
        B Main
	END
  • aplicaciones de grabación
// ledapp.c
void main()
{
	ledconfig();
	for()
	{
		ledon();delay();
	  	ledoff();delay();
	}
}
  • escritura de la unidad
// leddrv.c
void ledconfig()
{
	……
}
void ledon()
{
	……
}
void ledoff()
{
	……
}

Comentario unidad ejemplo leddrv.c

  • M M1 puerto configurado como un pin de salida
#define rGPMCON  *((volatile int *) 0x7f008820 )
void ledconfig()
	tmp= rGPMCON;		//读出端口寄存器值
	tmp &=! (0xF<<4);	//把bit4~7清0
	tmp |= (1<<4);		//把bit4~7写入0x1值
	rGPMCON = tmp;		//写回到端口寄存器
}
  • Iluminación
    puerto de configuración M1 da salida a un nivel bajo M
#define rGPMDAT  *((volatile int *) 0x7f008824 )
void ledon()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &=! (0x1<<1);	//把bit1清0
	tmp |= (0<<1);		//把bit1写入0x0值
	rGPMDAT = tmp;		//写回到端口寄存器
}
  • Off
    puerto de configuración M1 da salida a un nivel alto H
void ledoff()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &=	! (0x1<<1);	//把bit1清0
	tmp |= (1<<1);		//把bit1写入0x1值
	rGPMDAT = tmp;		//写回到端口寄存器
}

deberes

En la preparación de un programa de sistema operativo de luz no intermitente, LED, reivindicación
1) y el control del puerto GPM2 GPM4;
2) los conductores de escritura y aplicaciones.

Al principio incorporado, muchos no entienden para el hardware, pero esto no afecta a mi programa.
Aquí Insertar imagen Descripción

La respuesta es la siguiente:

  • Los conductores leddrv.c
//  leddrv.c
#define rGPMCON  *((volatile int *) 0x7f008820 )
// 控制GPM2和GPM4端口
void ledconfig(){
	tmp= rGPMCON;		//读出端口寄存器值
	tmp &= !(0xF<<8);	//把bit8~11清0
	tmp |= (1<<8);		//把bit8~11写入0x1值
	tmp &= !(0xF<<16);	//把bit16~19清0	
	tmp |= (1<<16);		//把bit16~19写入0x1值
	// 这里再提供一种简便写法,完全等价上面四行
	// tmp &= !(0xF<<8 | 0xF<<16);
	// tmp |= (1<<8 | 1 <<16);
	// 这里再再提供一种写法
	// tmp &= !(0xF0F << 8);
	// tmp |= (0x101 << 8);
	rGPMCON = tmp;		//写回到端口寄存器
}
#define rGPMDAT  *((volatile int *) 0x7f008824 )
void ledon()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &= !(0x1<<2);	//把bit2清0
	tmp |= (0<<2);		//把bit2写入0x0值
	tmp &= !(0x1<<4);	//把bit4清0
	tmp |= (0<<4);		//把bit4写入0x0值
	// 这里再提供一种简便写法,完全等价上面四行
	// tmp &= !(0x1<<2 | 0x1<<4);
	// tmp |= (0<<2 | 0<<4)
	rGPMDAT = tmp;		//写回到端口寄存器
}
void ledoff()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &= !(0x1<<2);	//把bit2清0
	tmp |= (1<<2);		//把bit2写入0x1值
	tmp &= !(0x1<<4);	//把bit4清0
	tmp |= (1<<4);		//把bit4写入0x1值
	// 这里再提供一种简便写法,完全等价上面四行
	// tmp &= !(0x1<<2 | 0x1<<4);
	// tmp |= (1<<2 | 1<<4)
	// 还可以这么写
	// tmp &= !(0x5 << 2);
	// tmp |= (0x5 << 2);// bit2,bit4写入1,相当于101左移2位
	rGPMDAT = tmp;		//写回到端口寄存器
}
  • aplicaciones ledapp.c
// leadapp.c
void delay(){ // 停止一段时间
	for( i=0;i<1000;i++)
		for( j=0;j<1000;j++);
}
void main()
{
	ledconfig(); // 配置驱动
	while(1)
	{
		ledon();delay();
		ledoff();delay();
	}
}

Apoyar el trabajo

(1) S3C6410 procesador utilizando su núcleo interno IP ( el ARM11 ), el (integrado en el procesador de controlador de vigilancia, el controlador de interfaz GPIO ) y otros controladores de interfaz.

(2) el núcleo es a los registros de puerto interfaz de programación principal, programador general a comprender las definiciones y los registros Uso de los puertos por (manual chip). Supongamos un tamaño 0xC2000004,32 dirección del registro de bits del puerto, tiene que ser escrita en el valor binario de bits 8-9 (10) 2, mientras que el otro bit permanece sin cambios, escribir el código de la llave (método usando un puntero de memoria)

tmp = *((volatile int*)0xC2000004);
tmp &= !( 0x3 << 8);
tmp |= (0x3 << 8);
*((volatile int*)0xC2000004) = tmp;

(3) componentes que pertenecen a la watchdog ( módulo de hardware ), que es una función de núcleo ( código de software de detección de fuera de control, cuando el sistema está "acabando" en el bucle y restaurar el funcionamiento del sistema ).

Publicados 170 artículos originales · ganado elogios 47 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43734095/article/details/104803058
Recomendado
Clasificación