Bedava ARM ve gömülü sistem kursu : teori + pratik deneyli, her ilde

Başlatan picusta, 01 Aralık 2013, 21:46:05


muhittin_kaplan

giriş çıkış kodları vb lerini benim mi yazmam gerekiyor, epeydir girmiyorum derslere, uzak kalmışım,

MC_Skywalker

giriş çıkış kodlarını yazacaksın ve if ielkarşılaştırma yapacaksın

muhittin_kaplan

portların ayarlarını felan bana yaptırıyor anladım hocam.

yilmaz_kk

  Arkadaşlar aşağıdaki kod neden Toggle işlemi yapmaz. Çıldırmak üzereyim. Delay zamanı değiştirdim. Çıkışı tuşa basılı olduğunda sürekli bir yapayım dedim deneme amaçlı. Sıkıntıyı bir türlü çözemedim. Bu kadar temel birşeyde takılmak gerçekten çok sıkıcı. Çözümü de bulamadım. Yardımlarınızı rica ediyorum.

// main.c for Lab 9
// Runs on LM4F120/TM4C123
// In this lab we are learning functional debugging by dumping
//   recorded I/O data into a buffer
// February 10, 2014

// Lab 9
//      Jon Valvano and Ramesh Yerraballi

// ***** 1. Pre-processor Directives Section *****
#include "TExaS.h"
#include "tm4c123gh6pm.h"

#define GPIO_PORTF_LOCK_R       (*((volatile unsigned long *)0x40025520))
#define GPIO_PORTF_CR_R         (*((volatile unsigned long *)0x40025524))
#define GPIO_PORTF_DATA_R       (*((volatile unsigned long *)0x400253FC))
#define GPIO_PORTF_DIR_R        (*((volatile unsigned long *)0x40025400))
#define GPIO_PORTF_AFSEL_R      (*((volatile unsigned long *)0x40025420))
#define GPIO_PORTF_PUR_R        (*((volatile unsigned long *)0x40025510))
#define GPIO_PORTF_DEN_R        (*((volatile unsigned long *)0x4002551C))
#define GPIO_PORTF_AMSEL_R      (*((volatile unsigned long *)0x40025528))
#define GPIO_PORTF_PCTL_R       (*((volatile unsigned long *)0x4002552C))
#define SYSCTL_RCGC2_R          (*((volatile unsigned long *)0x400FE108))
#define SYSCTL_RCGC2_GPIOF      0x00000020  // port F Clock Gating Control


// ***** 2. Global Declarations Section *****

// FUNCTION PROTOTYPES: Each subroutine defined
void DisableInterrupts(void); // Disable interrupts
void EnableInterrupts(void);  // Enable interrupts
void Toggle(void); //Toggle
void Delay(void); //Delay
// ***** 3. Subroutines Section *****

unsigned long SW1;
unsigned long SW2;
unsigned long Led;


/* 
This Lab9 starter project is the same as C9_Debugging example but 
includes the connections to the Lab9 grader. You will make three changes. 
First, make the LED flash at 10 Hz. In other words, make it turn on for 0.05 seconds, 
and then turn off for 0.05 seconds. 
Second, make the LED flash if either switch SW1 or SW2 are pressed 
(this means either PF4 or PF0 is 0). 
Third, record PortF bits 4,1,0 every time the input changes or the output changes. 
For example, if your system detects a change in either PF4 or PF0 input, 
record PortF bits 4,1,0. If your system causes a change in PF1, record PortF bits 4,1,0. 

If both PF4 and PF0 switch are not pressed, the PF1 output should be low.  
If either PF4 or PF0 switches is pressed, the output toggles at 10 Hz (±10%). 
Information collected in the Data array matches the I/O on PortF.
50 data points are collected only on a change in input or a change in output.
(i.e., no adjacent elements in the array are equal).

*/


void PortF_Init(void){ volatile unsigned long delay;
  SYSCTL_RCGC2_R |= 0x00000020;     // 1) activate clock for Port F
  delay = SYSCTL_RCGC2_R;           // allow time for clock to start
  GPIO_PORTF_LOCK_R = 0x4C4F434B;   // 2) unlock GPIO Port F
  GPIO_PORTF_CR_R = 0x1F;           // allow changes to PF4-0
  // only PF0 needs to be unlocked, other bits can't be locked
  GPIO_PORTF_AMSEL_R = 0x00;        // 3) disable analog on PF
  GPIO_PORTF_PCTL_R = 0x00000000;   // 4) PCTL GPIO on PF4-0
  GPIO_PORTF_DIR_R = 0x02;          // 5) PF4,PF0 in, PF1 out
  GPIO_PORTF_AFSEL_R = 0x00;        // 6) disable alt funct on PF7-0
  GPIO_PORTF_PUR_R = 0x11;          // enable pull-up on PF0 and PF4
  GPIO_PORTF_DEN_R = 0x1F;          // 7) enable digital I/O on PF4-0
}

// Initialize SysTick with busy wait running at bus clock.
void SysTick_Init(void){
  NVIC_ST_CTRL_R = 0;                   // disable SysTick during setup
  NVIC_ST_RELOAD_R = 0x00FFFFFF;        // maximum reload value
  NVIC_ST_CURRENT_R = 0;                // any write to current clears it             
  NVIC_ST_CTRL_R = 0x00000005;          // enable SysTick with core clock
}

// first data point is wrong, the other 49 will be correct
unsigned long Time[50];
// you must leave thr Data array defined exactly as it is
unsigned long Data[50];

int main(void){  unsigned long i,last,now;
  TExaS_Init(SW_PIN_PF40, LED_PIN_PF1);  // activate grader and set system clock to 80 MHz
  PortF_Init();   // initialize PF1 to output
  SysTick_Init(); // initialize SysTick, runs at 16 MHz
 // i = 0;          // array index
 // last = NVIC_ST_CURRENT_R;
  EnableInterrupts();           // enable interrupts for the grader
	
	SW1 = GPIO_PORTF_DATA_R&0x10; // PF4 into SW1
	SW2 = GPIO_PORTF_DATA_R&0x01; // PF0 into SW2
	Led = GPIO_PORTF_DATA_R&0x02; // PF1 into OUT
	
	
	Led = 0x00;
	
  while(1){
		
		if  (SW1 == 0x00) {
				Toggle();			
		}
		else if ( SW2 == 0x00) { //Is one of the button pressed?
						Toggle();		
		}
		else {
			Led = 0x00;
		}
	}
}

void Toggle(void) {
		Led = 0x00;
	  Delay();
		Led |= 0x02;
		Delay();
}

void Delay(void){unsigned long volatile time;
  time = 16000; // 0.05sec
  while(time){
   time--;
  }
}

pea

Alıntı yapılan: yilmaz_kk - 09 Mart 2014, 22:38:13
  Arkadaşlar aşağıdaki kod neden Toggle işlemi yapmaz.

SW1 = GPIO_PORTF_DATA_R&0x10; // PF4 into SW1
	SW2 = GPIO_PORTF_DATA_R&0x01; // PF0 into SW2
	Led = GPIO_PORTF_DATA_R&0x02; // PF1 into OUT
	
	
	Led = 0x00;
	
  while(1){


Switch durumlarını sadece bir kez okumuşsunuz.

muhittin_kaplan

texasware yok-açılmıyor (hardware). kaldırdım yükledim yine yok.

pea

Alıntı yapılan: muhittin_kaplan - 10 Mart 2014, 23:56:59
texasware yok-açılmıyor (hardware). kaldırdım yükledim yine yok.

Bende "Keil C:\Keil" yolunda kurulu ve TexasWare de "C:\Keil\TExaSware" yolunda.
"C:\Keil\TExaSware\Lab6_BranchingFunctionsDelays" konumunda da "TExaS.h" dahil olmak üzere Lab6 dosyaları bulunuyor.

2 Mart'taki duyuruda da, Keil'ın Lab dosyalarını tanımama sorunu için şu yama yayımlanmış. http://edx-org-utaustinx.s3.amazonaws.com/UT601x/TExaS_Patch.exe
Lab 2-7 için ana dosyalar da burada: http://edx-org-utaustinx.s3.amazonaws.com/UT601x/TExaS_Install.exe
Sanırım bu yeni dosyalar için Patch gerekmiyor.

MC_Skywalker

lab6 da sıkıntı yaşayanlar;

Project menüsünden  Options for Target 'Lab6' seçip açılan pencerede "Target" sekmesinde "Operating systems:" kısmdan TExaS seçili olup olmadığını kontrol edin. Benim Lab6 yaptığımda seçili değildi beni bayağı uğraştırmıştı.


muhittin_kaplan


mir_as82

GPIO_PORTA_DR8R_R|=0x20;// gibi bir kod var. Bu kodun açıklamasında: "enable 8 ma drive on PA5"

Burada yapılan işlem nedir? Pin in akımını mi sınırlıyor? Yoksa sabit akım vermesi için mi?

MrDarK

ARM chiplerinde her pinden aynı akım türü almayabiliyorsun.

Örnek bir tanımlama bloğu
  *            @arg GPIO_Mode_Out_PP_Low_Fast: Output push-pull, low level, 10MHz
  *            @arg GPIO_Mode_Out_OD_Low_Slow: Output open-drain, low level, 2MHz
  *            @arg GPIO_Mode_Out_PP_Low_Slow: Output push-pull, low level, 2MHz
  *            @arg GPIO_Mode_Out_OD_HiZ_Fast: Output open-drain, high-impedance level, 10MHz
  *            @arg GPIO_Mode_Out_PP_High_Fast: Output push-pull, high level, 10MHz
  *            @arg GPIO_Mode_Out_OD_HiZ_Slow: Output open-drain, high-impedance level, 2MHz
  *            @arg GPIO_Mode_Out_PP_High_Slow: Output push-pull, high level, 2MHz
Picproje Eğitim Gönüllüleri ~ MrDarK

mir_as82


pea

Tabii ki sabit akım değil. Akım sınırlama da değilmiş.
Lojik seviyelerin(VOH-VOL), open drain çıkışlardaki, pull-up direncini çekilecek akıma göre değiştirerek, ayarlanmasını sağlıyormuş.

yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.