Monday, 16 October 2017

Bagian III. General Purpose Input / Output, Modul Clock dan Watchdog Timer

1. Pendahuluan

Dalam bagian ini akan dibahas tentang General Purpose Input / Output (GPIO) dan konfigurasinya. DSP TMS320F28335 memiliki 88 pin GPIO, namun pada board F28335 Delfino Experimenter Kit ini hanya terdapat 47 pin GPIO saja. Masing-masing pin GPIO memiliki 4 macam fungsi yang berbeda yang dapat dipilih oleh user / programmer. GPIO dikelompokkan menjadi 3 port yakni port A (GPIO0 – GPIO31), port B (GPIO32 – GPIO63) dan port C (GPIO64 – GPIO87).  Tegangan keluaran maksimum dan tegangan masukan maksimum pin GPIO adalah +3,3V. Tegangan masukan ke pin input GPIO yang melebihi +3,3V dapat merusak experimenter kit ini. 


2. GPIO Register

Untuk konfigurasi GPIO, register-register yang perlu untuk dideklarasikan dalam program utama seperti yang digambarkan dalam Gambar 1. Secara umum, register GPIO dikelompokkan menjadi 2 group register yakni register kontrol (GpioCtrlRegs) dan register data (GpioDataRegs) seperti yang digambarkan pada bagan register GPIO pada Gambar 2 dan 3. Masing-masing register kontrol dan register data GPIO merupakan register 32 bit.

Gambar 1. Register GPIO

Gambar 2. Register Kontrol GPIO

Gambar 3. Register Data GPIO

A. REGISTER KONTROL

- GPxMUX
GPxMUX digunakan untuk pemilihan fungsi digital I/O dan peripheral. Terdapat 4 fungsi berbeda pada masing-masing pin GPIO dan group port. Konfigurasi GPxMUX terbagi 2 bagian yakni GPxMUX1 dan GPxMUX2 yang masing-masingnya merupakan register 32 bit untuk mengatur fungsi 15 pin GPIO pada setiap group port. Tabel 1 menunjukkan konfigurasi fungsi pin GPIO pada register GPxMUX1 dan GPxMUX2. Sebagai contoh cara konfigurasi register kontrol GPAMUX1 adalah sebagai berikut : untuk menggunakan pin GPIO0 sebagai digital I/O maka bit 0 dan bit 1 pada register GPAMUX1 harus diberi nilai 00 (biner), bila digunakan sebagai EPWM1A maka harus diberi nilai 01. Untuk syntax perintah dalam program utama dapat dilihat pada tabel interaktif * , Tabel 2 (* Catatan : ubah nilai bit register kontrol GPAMUX1 pada tabel). Syntax program untuk mengkonfigurasikan GPxMUX dapat dilakukan dengan cara global (keseluruhan 15 pin GPIO) atau dapat pula dikonfigurasikan per masing-masing pin GPIO. Dalam tutorial bagian ini, pin GPIO difungsikan sebagai output digital untuk menyalakan lampu LED pada papan rangkaian pengujian. Oleh karena itu  register GPxMUX dideklarasikan sebagai fungsi input / output digital (I/O). 











Tabel 1 : Konfigurasi Fungsi Pin GPIO (GPxMUX1 dan GPxMUX2)

Keterangan : GPIO yang ditandai dengan warna biru pada Tabel 1 adalah pin GPIO yang tidak tersedia dalam F28335 Delfino Experimenter Board.

Tabel 2 : Tabel Interaktif Konfigurasi Register Kontrol GPAMUX1 dan Syntax Perintah Program Utama

- GPxDIR
GPxDIR merupakan register kontrol pengaturan arah data (sebagai input atau output). Pada kondisi default, pin GPIO akan berfungsi sebagai input data ketika dikonfigurasikan sebagai Digital I/O pada GPxMUXn. Untuk menjadikan pin GPIO sebagai output data, maka pin GPxDIR ini dikonfigurasikan dengan nilai 1. Register ini tidak berpengaruh pada pin GPIO ketika dikonfigurasikan sebagai peripheral (1, 2, atau 3). Sebagai contoh pin GPIO0 dijadikan sebagai output dengan cara sebagai berikut :

GpioCtrlRegs. GPAMUX1.bit.GPIO0 = 0;  // GPIO0 sebagai I/O digital

GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0 sebagai output

Syntax perintah diatas merupakan contoh konfigurasi per masing-masing pin GPIO (deklarasi individual). Untuk deklarasi register secara global dapat menggunakan syntax perintah sebagai berikut :

GpioCtrlRegs. GPAMUX1.all = 0;  // GPIO0-15 sebagai I/O digital
GpioCtrlRegs.GPADIR.bit.all= 0xFFFF0000; // GPIO0-7 sebagai output, GPIO8-15 sebagai input

Catatan : Bilangan hexadecimal menggunakan "0x" di depannya sedangkan bilangan desimal dituliskan langsung.


- GPxPUD
Register kontrol ini digunakan untuk internal pull-up pada pin GPIO0 – 31dimana kondisi default internal pull-up GPIO0-11 “disable” dan GPIO12-31 “enable”

- GPxQSEL1, GPxQSEL2 dan GPxCTRL
Register GPxQSEL1, GPxQSEL2 dan GPxCTRL digunakan sebagai filter sinyal noise ketika pin GPIO (GPIO0 – GPIO63) digunakan sebagai input data.

B. REGISTER DATA

- GPxDATA

Pembacaan data (sebagai input) atau penulisan data (sebagai output) pada pin GPIO menggunakan register data GPxDATA. Selain itu ada 3 register data lainnya yang dapat digunakan untuk penulisan data (sebagai output) yakni : GPxSET, GPxCLEAR dan GPxTOGGLE

- GPxSET
Output pin GPIO akan menjadi aktif “tinggi” ketika register data GPxSET bernilai 1. Sebagai contoh, untuk membuat output pin GPIO1 aktif tinggi adalah dengan menggunakan instruksi perintah pada program utama sebagai berikut :
GpioDataRegs.GPASET.bit.GPIO1 = 1;

- GPxCLEAR
Register ini merupakan kebalikan fungsi dari GPxSET, output pin GPIO akan aktif “rendah” ketika register data ini bernilai 1. Sebagai contoh :

GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;

- GPxTOGGLE
GPxTOGGLE merupakan register data untuk menjadikan output pin GPIO yang pada kondisi awalnya aktif “tinggi” menjadi aktif “rendah” dan sebaliknya. Contoh penggunaan register GPxTOGGLE (asumsi kondisi awal : pin GPIO1 aktif  “tinggi”) :

GpioDataRegs. GPASET.bit.GPIO1 = 1;           // Kondisi awal GPIO1 aktif “tinggi”
GpioDataRegs. GPATOGGLE.bit.GPIO1 = 1;  // pin GPIO1 menjadi aktif “rendah”
GpioDataRegs. GPATOGGLE.bit.GPIO1 = 1;  // pin GPIO1 kembali menjadi aktif “tinggi”


3. Modul Clock F28335

DSP TMS320F28335 pada Control card F28335 release 2.2 ini menggunakan pembangkit sinyal clock eksternal yang digerakkan oleh crystal oscillator 30 MHz. Secara internal, frekuensi clock ini dapat dinaikkan hingga 150MHz (frekuensi maksimum TMS320F28335) dengan menyesuaikan setting konfigurasi pada kontrol register PLL (PLLCR). Modul clock dan registernya diilustrasikan pada gambar 4. Distribusi sinyal clock seperti yang terlihat pada gambar 5.

Gambar 4. Modul Clock F28335


Gambar 5. Domain Clock dan Reset 

Dalam contoh program pada tutorial ini menggunakan frekuensi CLKIN (SYSCLKOUT) 150MHz. Oleh karena crystal oscillator external yang digunakan 30MHz, maka kita mengalikannya dengan 10 melalui penyetingan kontrol register PLLCR (DIV) kemudian dibagi dengan 2 melalui penyetingan kontrol register PLLSTS (DIVSEL). Untuk penggunaan peripheral lain, High-Speed Clock Pre-scaler (HISPCP) dan Low-Speed Clock Pre-scaler (LOSPCP) digunakan sebagai pembagi frekuensi clock tambahan yang dapat disetting secara independen. HISPCP digunakan untuk clock peripheral Analog-Digital Converter (ADC), LOSPCP digunakan sebagai clock peripheral SCI, SPI dan McBSP, sementara untuk peripheral lainnya mendapatkan sinyal clock langsung dari SYSCLKOUT seperti terlihat pada gambar dibawah ini. Masing-masing clock peripheral dapat diaktifkan (clock enable) secara individual tergantung kebutuhan pemakaian peripheral dengan mengatur setting peripheral clock control register (PCLKCR).

REGISTER MODUL CLOCK F28335

- PLLCR (Phase-Locked Loop Control Register)




- PLLSTS (Phase-Locked Loop Status)




- PCLKCR (Peripheral Clock Control Register)


4. Modul Watchdog Timer


Modul watchdog (watchdog timer) merupakan sebuah timer/counter yang bekerja secara independen. Fungsi dari watchdog adalah mendeteksi dan memulihkan CPU dari kegagalan sistem (hardware atau software). Pada kondisi normal, CPU akan me-restart counter pada watchdog timer secara berkala. Namun ketika terjadi gangguan/kegagalan sistem hardware atau software, CPU akan mengalami kegagalan untuk me-restart counter pada watchdog timer. Akibatnya, hitungan counter watchdog timer melimpah (overflow) dan watchdog timer akan mengirimkan sinyal reset ke CPU agar sistem dapat kembali ke kondisi normal. Pada control card F28335, sinyal clock watchdog timer diperoleh langsung dari oscillator (OSCCLK) sedangkan clock CPU diperoleh modul clock (CLKIN). Watchdog timer secara sederhana seperti yang diilustrasikan pada gambar 6. Modul watchdog timer beserta register-registernya digambarkan pada gambar 7.

Gambar 6. Watchdog Timer


Gambar 7. Modul Watchdog Timer dan Register

REGISTER MODUL WATCHDOG TIMER

- WDCR (Watchdog Control Register)



- WDKEY (Watchdog Key Register)




5. Latihan 

Tujuan utama dari latihan ini adalah untuk mempelajari penggunaan dan konfigurasi dari GPIO, modul clock dan watchdog timer. Latihan terdiri dari 3 bagian yakni : Project_1: 8-Bit Binary Counter, Project_2: Running Light dan Project_3: 8-Bit Binary Counter dengan Tombol Start-Stop.

A. Project_1: 8-Bit Binary Counter
Pada latihan “Project_1”, 8 pin GPIO dikonfigurasikan sebagai output untuk menyalakan LED (binary counter). Pin GPIO yang digunakan adalah pin GPIO0 – GPIO7. Koneksi hardware seperti yang terlihat pada Gambar 8.

Gambar 8. Koneksi Hardware

Langkah-langkah pemograman :
1. Hubungkan pin GPIO0-7 ke LED, pin 3V3 dan Ground seperti terlihat pada gambar 8. Sambungkan kabel USB pada Docking station ke PC.

2. Double click icon Code Composer Studio pada desktop, buat project CCS baru.

3. Pilih target processor: 2833x Delfino >> Experimenter’s Kit – Delfino F28335, beri nama “Project_1”, gunakan lokasi direktori default lalu click “Finish” (lihat Gambar 9).

Gambar 9. New Project

4. Pada project explorer, click kanan “Project_1 [Active – Debug]”, click “Properties” (Gambar 10).

Gambar 10. Properties Project

5. Pilih Build >> C2000 Linker >> Basic Options. Ubah stack size menjadi 0x400 lalu click “OK” (Gambar 11).

Gambar 11. Basic Option C2000 Linker

6. Click kanan “Project_1 [Active – Debug]” pada project explorer, pilih Build >> C2000 Compiler >> Include Options. Pada bagian “Add dir to #include search path”, click tombol add (lihat Gambar 12). Tambahkan direktori :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\include”, kemudian click “OK”. Hasil penambahan direktori file header seperti yang terlihat pada Gambar 13, kemudian click “OK”. Langkah ini bertujuan untuk mengarahkan pencarian lokasi file header (DSP28335_Device.h). File header ini dibutuhkan untuk inisialisasi perangkat dan penggunaan peripheral dalam chip processor.

(a)
(b)
Gambar 12. (a) Include Options (b) Directory Path

Gambar 13. Hasil Penambahan Direktori File header 

7. Click kanan “Project_1 [Active – Debug]” pada project explorer, pilih “Add Files” (lihat Gambar 14). Arahkan ke direktori :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\source
Caranya dengan copy dan paste direktori di atas pada isian “File Name”, lalu click “Open” (lihat Gambar 15) atau dengan cara mencari folder tersebut pada kolom navigasi folder pada bagian sebelah kiri. Click “DSP2833x_GlobalVariableDefs” lalu click “Open”. Pilih “Link to Files”, lalu click “OK” (lihat Gambar 16). File “DSP2833x_GlobalVariableDefs” ini mendefinisikan semua nama variabel global untuk mengakses memory map register peripheral.

Gambar 14. Penambahan File

(a)
(b)
Gambar 15. (a) Direktori Penambahan File (b) File yang Diperlukan

Gambar 16. Link Files


8. Ulangi langkah 8, untuk penambahan file berikut :

DSP2833x_CodeStartBranch.asm

Direktori :

C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_common\source

DSP2833x_Headers_nonBIOS.cmd

Direktori :

C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\cmd



Hasil dari langkah 6 - 8 dapat dilihat pada project explorer Code Composer Studio seperti Gambar 17. 



CATATAN

Pastikan header file (langkah 6) dan link file tambahan (langkah 7 dan 8) menggunakan versi yang sama. Versi file dapat dilihat dari nama sub folder yakni “v142” seperti yang terlihat pada list dibawah (warna merah). Penggunaan versi yang berbeda akan menyebabkan error pada saat compile (Debug).


List versi file header dan file link :
- Header :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\include
- DSP2833x_GlobalVariableDefs :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\source  
- DSP2833x_CodeStartBranch.asm :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_common\source   
- DSP2833x_Headers_nonBIOS.cmd :
C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\cmd 




Gambar 17. Include File dan Penambahan Link File

9. Buat settingan konfigurasi target baru (Gambar 18). Click kanan “Project_1 [Active – Debug]” pada project explorer, pilih dan click New >> Target Configuration File. Beri nama file Target Configuration : “F28335Target.ccxml” kemudian click “Finish”. Kemudian pilih Connection : “Texas Instruments XDS100v1 USB Debug Probe”, centang pilihan “Experimenter’s Kit – Delfino F28335” lalu “Save” (Gambar 19).





Gambar 18. New Target Configuration




Gambar 19. Setup Target Configuration



10. Click “main.c” pada project explorer, hapus semua baris perintah yang tertulis. Ketik dan lengkapi bagian yang diberi tanda "?" pada source code berikut lalu “Save

Source Code:

1 //==================================================================
2 // Source Code
3 // Project_1 : Digital Output (8Bit Binary Counter)
4 //==================================================================
5
6  #include "DSP2833x_Device.h"
7
8  // Prototype statements for functions found within this file.
9  void Gpio_select(void);    // GPIO Function Selection Subroutine
10 void InitSystem(void);     // Basic Core Initialization Subroutine
11 void delay_loop(long);     // Delay Subroutine
12
13 // Main Subroutine
14 void main(void)
15 {
16 int counter=0; // Binary Counter for Digital Output
17 InitSystem();  // Basic Core Initialization Subroutine
18 DINT;          // Disable All Interrupts
19 Gpio_select(); // GPIO Function Selection Subroutine
20
21 while(1)
22 {
23 counter++;
24
25 // Write your 8Bit binary counter code here
26 // if bit 0 of counter = 1, set GPIO0 to 1 else clear GPIO0 to 0
27 // if bit 1 of counter = 1, set GPIO1 to 1 else clear GPIO1 to 0
28 // if bit 2 of counter = 1, set GPIO2 to 1 else clear GPIO2 to 0
29 // if bit 3 of counter = 1, set GPIO3 to 1 else clear GPIO3 to 0
30 // if bit 4 of counter = 1, set GPIO4 to 1 else clear GPIO4 to 0
31 // if bit 5 of counter = 1, set GPIO5 to 1 else clear GPIO5 to 0
32 // if bit 6 of counter = 1, set GPIO6 to 1 else clear GPIO6 to 0
33 // if bit 7 of counter = 1, set GPIO7 to 1 else clear GPIO7 to 0
34
35 delay_loop(1500000);
36 }
37 }
38
39 // Delay Subroutine
40 void delay_loop(long end)
41 {
42 long i;
43 for (i = 0; i < end; i++)
44 {
45 asm(" NOP");
46 // EALLOW;
47 // SysCtrlRegs.WDKEY = 0x55; //WD counter will reset on next AAh write
48 // SysCtrlRegs.WDKEY = 0xAA; //WD counter is reset
49 // EDIS;
50 }
51 }
52
53 // GPIO Function Selection Subroutine
54 void Gpio_select(void)
55 {
56 EALLOW;
57
58 // GPAMUX1 >> for GPIO15 ... GPIO0
59 // GPAMUX2 >> for GPIO31 ... GPIO16
60 // GPBMUX1 >> for GPIO47 ... GPIO32
61 // GPBMUX2 >> for GPIO63 ... GPIO48
62 // GPCMUX1 >> for GPIO79 ... GPIO64
63 // GPCMUX2 >> for GPIO87 ... GPIO80
64 // Setting GPIO as Digital I/O function
65 // Individual GPIO function declaration
66 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = ?;
67 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = ?;
68 GpioCtrlRegs.GPAMUX1.bit.GPIO2 = ?;
69 GpioCtrlRegs.GPAMUX1.bit.GPIO3 = ?;
70 GpioCtrlRegs.GPAMUX1.bit.GPIO4 = ?;
71 GpioCtrlRegs.GPAMUX1.bit.GPIO5 = ?;
72 GpioCtrlRegs.GPAMUX1.bit.GPIO6 = ?;
73 GpioCtrlRegs.GPAMUX1.bit.GPIO7 = ?;
74 // Global GPIO function declaration
75 // GpioCtrlRegs.GPAMUX1.all = 0x????????;
76
77 // GPIADIR >> for GPIO31 ... GPIO0
78 // GPIBDIR >> for GPIO63 ... GPIO32
79 // GPICDIR >> for GPIO87 ... GPIO64
80 // Setting GPIO as output
81 // Individual GPIO direction declaration
82 GpioCtrlRegs.GPADIR.bit.GPIO0 = ?; // LED D1 at GPIO0
83 GpioCtrlRegs.GPADIR.bit.GPIO1 = ?; // LED D2 at GPIO1
84 GpioCtrlRegs.GPADIR.bit.GPIO2 = ?; // LED D3 at GPIO2
85 GpioCtrlRegs.GPADIR.bit.GPIO3 = ?; // LED D4 at GPIO3
86 GpioCtrlRegs.GPADIR.bit.GPIO4 = ?; // LED D5 at GPIO4
87 GpioCtrlRegs.GPADIR.bit.GPIO5 = ?; // LED D6 at GPIO5
88 GpioCtrlRegs.GPADIR.bit.GPIO6 = ?; // LED D7 at GPIO6
89 GpioCtrlRegs.GPADIR.bit.GPIO7 = ?; // LED D8 at GPIO7
90 // Global GPIO direction declaration
91 // GpioCtrlRegs.GPADIR.all = 0x????????;
92
93 EDIS;
94 }
95
96 // Basic Core Initialization Subroutine
97 void InitSystem(void)
98 {
99 EALLOW;
100 SysCtrlRegs.WDCR = 0x????; //Watchdog enabled, 4.3 milliseconds
101 SysCtrlRegs.PLLSTS.bit.DIVSEL = ?;
102 SysCtrlRegs.PLLCR.bit.DIV = ??; //CLKIN = 30MHz * 10 / 2 = 150 MHz
103 EDIS;
104 }
105 //================================================================
106 // End of SourceCode.
107 //================================================================



11. Compile / cek error pada source code, click “Debug” pada toolbar (Gambar 20). Jika tidak ditemukan error pada source code, lanjutkan ke langkah berikut di bawah.


Gambar 20. Debug Toolbar

12. Click “CPU Reset” (Gambar 21), kemudian click “Restart” (Gambar 22) pada toolbar.

Gambar 21. CPU Reset Toolbar

Gambar 22. Restart Toolbar

13. Untuk mengeksekusi program yang telah di-compile, click “Resume” (Gambar 23) pada toolbar atau tekan tombol “F8” pada keyboard. Amati nyala lampu LED pada papan rangkaian pengujian. LED akan menyala sesaat menunjukkan bahwa counter pada watchdog timer overflow sebelum semua perintah pada source code selesai dieksekusi oleh CPU.

Gambar 23. Resume Toolbar

14. Untuk mengakhiri eksekusi program, click “Suspend” pada toolbar (Gambar 24) atau dengan menekan tombol “Alt + F8” pada keyboard secara bersamaan. Lalu click “CPU Reset” >> “Restart” dan terakhir click “Terminate” (Gambar 25) atau tekan tombol “Ctrl + F2” secara bersamaan pada keyboard.



Gambar 24. Suspend Toolbar


Gambar 25. Terminate Toolbar


15. LED menyala sesaat akibat counter watchdog timer selalu overflow. Oleh karena itu, hapus tanda "//" pada baris perintah 46 - 49 sehingga baris perintah tersebut tidak lagi menjadi sebuah comment dan perintah tersebut akan dieksekusi oleh CPU. Baris perintah tersebut merupakan langkah untuk me-reset counter pada watchdog timer agar tidak terjadi overflow. Setelah menghapus tanda "//" tersebut, "Save" source code dan lakukan compile / debug kembali (Ulangi langkah 11-13). Amati nyala LED. LED akan menyala sesuai dengan hitungan counter biner 8 bit. Jika anda mengalami kesulitan dalam melengkapi / modifikasi source code diatas, source code lengkap dapat anda lihat disini.

B. Project_2: Running Light
Project_2 merupakan modifikasi dari Project_1, dimana 8 LED akan menyala dengan diawali nyala LED paling tepi, menuju ke tengah dan kembali lagi ke tepi. Proses urutan nyala LED seperti yang terlihat pada gambar berikut:

Gambar 26. Urutan Nyala LED: Running Light

Langkah-langkah pemrograman:
1. Buka file source code Project_1 (main.c).
2. Lakukan modifikasi source code "main.c" ini sesuai dengan proses urutan penyalaan LED pada Gambar 26. Modifikasi source code hanya dilakukan pada bagian perulangan perintah while(1), seperti yang terlihat pada potongan source code:

Source Code:
while(1)
{
for(i=0;i<6;i++)
      {
            switch (i)
            {
                  case 0: // LEDs: 10000001
                  {
                  GpioDataRegs.GPADAT.all = 0x81;
                  break;
                  }
                  case 1: // LEDs: 01000010
                  {
                  GpioDataRegs.GPADAT.all = 0x42;
                  break;
                  }
                  case 2: // LEDs: 00100100
                  {
                  GpioDataRegs.GPADAT.all = 0x24;
                  break;
                  }
                  case 3: // LEDs: 00011000
                  {
                  GpioDataRegs.GPADAT.all = 0x18;
                  break;
                  }
                  case 4: // LEDs: 00100100
                  {
                  GpioDataRegs.GPADAT.all = 0x24;
                  break;
                  }
                  case 5: // LEDs: 01000010
                  {
                  GpioDataRegs.GPADAT.all = 0x42;
                  break;
                  }
                  default: // LEDs: 00000000
                  {
                  GpioDataRegs.GPADAT.all = 0x00;
                  break;
                  }
            } // end switch
            delay_loop(1500000);
      }
}

3. Lalu "Save As" sebagai "Project_2.c". Source code lengkap dapat dilihat pada link ini. Seperti yang terdapat pada source code diatas, variabel counter tidak diperlukan dan diganti dengan variabel baru yakni : "i" dengan tipe data unsigned interger.


Gambar 27. "Save As" File

4. Sebelum melakukan compile terhadap "Project_2.c", exclude file source code Project_1 dengan cara click kanan "main.c" pada "Project Explorer" lalu pilih dan click "Exclude from Build" (lihat Gambar 28 dan 29). Langkah ini dilakukan agar "main.c" tidak ikut serta di-compile / build oleh Code Composer Studio.

Gambar 28. Exclude from Build

Gambar 29. Hasil Setelah Exclude from Build

5. Compile "Project_2.c" (lihat Langkah 11). Jika tidak ditemukan error, lanjutkan ke langkah 12 - 14.

6. Amati urutan nyala LED apakah telah sesuai dengan yang diinginkan seperti Gambar 26.

C. Project_3: 8-Bit Binary Counter (with Start-Stop Button)
Project_3 adalah pengembangan dari Project_1 dimana terdapat penambahan 2 input tombol (push-button) untuk memulai dan menghentikan eksekusi perintah. GPIO60 dan GPIO62 difungsikan sebagai digital input dan pin GPIO tersebut dihubungkan ke pin tombol yang terdapat pada papan pengujian. Koneksi hardware dengan penambahan koneksi tombol (push-button) ke GPIO seperti yang ditunjukkan pada Gambar 30.

Gambar 30. Koneksi Hardware Project_3

Langkah pemrograman:
1. Buka source code Project_1 "main.c". Tepat dibawah #include "DSP2833x_Device.h", tambahkan definisi START dan STOP berikut:

#define START GpioDataRegs.GPBDAT.bit.GPIO60 // Start Push‐Button SW1
#define STOP GpioDataRegs.GPBDAT.bit.GPIO62 // Stop Push‐Button SW2


REFERENSI

[1] SPRUFB0D, TMS320x2833x, 2823x System Control and Interrupts (Reference Guide)

<< Sebelumnya               Berikutnya >>

No comments:

Post a Comment