Système d'exploitation non GPIO contrôleur de port et de programmation 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 .
'
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
Port registre
GPIO Registre de contrôle
- Fonction - fonction de configuration port correspondant
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)
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
La LED clignote non-OS
étapes de développement
- Comprendre le tableau de matériel
- Ecrire entraînement
- applications d'écriture
- L'utilisation d'outils
- débogage système
diode Conseil de développement
Lecture des diagrammes de circuit
manuel de puce S3C6410
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.
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 ).