[] Système d'exploitation non-intégré le port GPIO et la programmation du contrôleur de la lampe LED

contrôleur GPIO

contour

S3C6410 orifice totale IO 187, est divisé en 17 PORT, chacun des ports IO peuvent être utilisés dans les repères de ligne d'entrée, les broches de sortie et les autres lignes de fil de la broche de fonction, peuvent être organisées par chaque port propre registre de commande de fonction . Insérer ici l'image Description
'Insérer ici l'image Description

L'architecture interne

  • contrôleur GPIO suspendu bus APB, appartenant au dispositif à basse vitesse.
  • Le dispositif de commande comprend un fichier de registre et le circuit fonctionnel correspondant constitué par le circuit fonctionnel peut être commandé par l'utilisateur en fonction de la manière de registres de travail.
  • Contrôleur entier compris Vivant-Part , OFF-Partie deux parties, à l' exception que s'il y a une alimentation en énergie lorsque MODE VEILLE , l' alimentation est fournie lorsque vivant parties, de sorte que le port peut être utilisé comme un réveil -up de sillage de signal
    Insérer ici l'image Description

Port registre

GPIO Registre de contrôle

  • Fonction - fonction de configuration port correspondant

Insérer ici l'image Description

GPIO registre de données

  • registre des données de bit correspondant à chaque ligne de bit du port correspondant IO
  • Si la ligne IO est utilisé comme entrée des broches, des broches avec les changements ligne de changement de niveau ( ce qui correspond à une valeur de 0 ou 1) , par un seul bit;
  • Si la ligne IO est utilisée comme sortie broche, alors la valeur de bit est de 1 bit , le fil conducteur extérieur correspondant est élevé (typiquement environ 3,3 V), puis le bit lorsque le bit est égal à 0 , le conducteur extérieur correspondant ligne de pied est faible (typiquement légèrement supérieure à 0V)

Insérer ici l'image Description

Pull-up registre GPIO

  • Ce registre peut cuisiner pour bras de traction ou pull-down io un traitement spécial, qui, dans certains cas, est très utile pour éviter le pull-up ou pull-down résistance sur le pcb, la conception du circuit peut être simplifié externe

Insérer ici l'image Description

La LED clignote non-OS

étapes de développement

  1. Comprendre le tableau de matériel
  2. Ecrire entraînement
  3. applications d'écriture
  4. L'utilisation d'outils
  5. débogage système
    Insérer ici l'image Description

diode Conseil de développement

Insérer ici l'image Description

Lecture des diagrammes de circuit

manuel de puce S3C6410

Insérer ici l'image Description

programme-cadre

  • compilation
;asses.s内容
	AREA Init, CODE READONLY
	ENTRY
_start
        B Main
	END
  • applications d'écriture
// ledapp.c
void main()
{
	ledconfig();
	for()
	{
		ledon();delay();
	  	ledoff();delay();
	}
}
  • Ecrire entraînement
// leddrv.c
void ledconfig()
{
	……
}
void ledon()
{
	……
}
void ledoff()
{
	……
}

Ecrire exemple lecteur leddrv.c

  • M M1 orifice configuré comme une broche de sortie
#define rGPMCON  *((volatile int *) 0x7f008820 )
void ledconfig()
	tmp= rGPMCON;		//读出端口寄存器值
	tmp &=! (0xF<<4);	//把bit4~7清0
	tmp |= (1<<4);		//把bit4~7写入0x1值
	rGPMCON = tmp;		//写回到端口寄存器
}
  • Éclairage
    port de configuration M1 émet un faible niveau M
#define rGPMDAT  *((volatile int *) 0x7f008824 )
void ledon()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &=! (0x1<<1);	//把bit1清0
	tmp |= (0<<1);		//把bit1写入0x0值
	rGPMDAT = tmp;		//写回到端口寄存器
}
  • Off
    port de configuration sorties M1 un M de haut niveau
void ledoff()
{
	tmp= rGPMDAT;		//读出端口寄存器值
	tmp &=	! (0x1<<1);	//把bit1清0
	tmp |= (1<<1);		//把bit1写入0x1值
	rGPMDAT = tmp;		//写回到端口寄存器
}

Travail à domicile

Dans la préparation d'un programme de système d'exploitation d' éclairage à LED non clignotant, revendication
1) et l'orifice de commande GPM2 GPM4;
2) les pilotes d'écriture et d' applications.

Dans un premier temps intégré, beaucoup ne comprennent pas le matériel, mais cela ne porte pas atteinte à mon programme.
Insérer ici l'image Description

La réponse est la suivante:

  • pilotes 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;		//写回到端口寄存器
}
  • applications 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();
	}
}

Soutenir le travail

(1) S3C6410 processeur en utilisant son noyau IP interne ( la ARM11 ), le processeur intégré ( contrôleur de surveillance, un contrôleur d'interface GPIO ) et d' autres contrôleurs d'interface.

(2) le noyau est de registres de port d'interface de programmation maîtres, programmeur général pour comprendre les définitions et les registres de port de l'utilisation de (manuel de puce). Supposons une taille de bit d'adresse de registre de port 0xC2000004,32, il doit être écrit à la valeur binaire de bits 8-9 (10) 2, tandis que l'autre bit reste inchangé, écrire le code de clé (méthode utilisant un pointeur de mémoire)

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

(3) les composants appartenant au chien de garde ( module de matériel ), qui est une fonction de base ( emballement de code de logiciel de détection, lorsque le système est « en cours d' exécution out » dans la boucle et restaurer le fonctionnement du système ).

Publié 170 articles originaux · louange gagné 47 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43734095/article/details/104803058
conseillé
Classement