To use other ports

From ThaiEasyElecWiki
Jump to: navigation, search

By default, the console module uses serial port 0 for communication. This is set at the beginning of console.c:

#include "../app_config.h"

#ifdef CONSOLE

#ifndef CONS_SER
#define CONS_SER	0
#endif

To use other ports, it's recommended to define it in app_config.h. For example, the line below moves console to serial port 2.

#define CONS_SER	2

Note that this can be put anywhere in app_config.h. No matter where it's located, it is seen above the line "#ifndef CONS_SER" in console.c so the next line "#define CONS_SER 0" is ignored.

Anyway, what we have done above does nothing with port's function enable for serial port 0 nor 2. This means the pins TXD0 and RXD0 are still functioning while TXD2 and RXD2 are not enabled. You need to do this manually by turning on power, disable and enable related pins. Note that serial port 0 is powered by default.

The code below are from main.c. Comment some lines out so the selected pins work as you need.

	LPC_IOCON->P0_2  |= 1;						//this sets P0.2 as TXD0
	LPC_IOCON->P0_3  |= 1;						//this sets P0.3 as RXD0

	...

//	PCONP |= (1 << 24);							//this powers on UART2
//	LPC_IOCON->P0_10 |= 1;						//this sets P0.10 as TXD2
//	LPC_IOCON->P0_11 |= 1;						//this sets P0.11 as RXD2

//	PCONP |= (1 << 25);							//this powers on UART3
//	LPC_IOCON->P0_0  |= 1;						//this sets P0.0 as TXD3
//	LPC_IOCON->P0_1  |= 1;						//this sets P0.1 as RXD3
=======================================================================

โดยปกติ console จะใช้การสื่อสารผ่าน serial port 0 เนื่องจากถูกกำหนดไว้ในไฟล์ console.c ดังนี้

#include "../app_config.h"

#ifdef CONSOLE

#ifndef CONS_SER
#define CONS_SER	0
#endif

การเปลี่ยนไปใช้พอร์ทอื่น ทำได้โดยการกำหนดค่า CONS_SER ไว้ตามต้องการ ในไฟล์ app_config.h เช่น ถ้าต้องการใช้พอร์ท 2 ให้กำหนดดังนี้

#define CONS_SER	2

โดยสามารถวางไว้ตำแหน่งใดในไฟล์ app_config.h ก็ได้ เพราะ compiler จะพบการกำหนดนี้ในไฟล์ app_config.h ก่อนที่จะพบการกำหนดค่าเริ่มต้นเสมอ (เพราะ app_config.h ถูก include ก่อนที่จะมีการกำหนดค่าเริ่มต้น)

อย่างไรก็ตาม การกำหนดดังกล่าวนี้ ไม่เกี่ยวข้องกับการตั้งค่าขา TXD และ RXD ที่ใช้ในการสื่อสาร ซึ่งผู้ใช้จะต้องกำหนดเองต่างหาก หมายความว่าขา TXD0 และ RXD0 ยังคงทำงานอยู่ในขณะที่ขา TXD2 และ RXD2 ยังไม่สามารถใช้งานได้ โค้ดในส่วนนี้อยู่ในไฟล์ main.c ให้ทำการแก้ไขปิดหรือเปิดขา TXD และ RXD ตามต้องการ

	LPC_IOCON->P0_2  |= 1;						//this sets P0.2 as TXD0
	LPC_IOCON->P0_3  |= 1;						//this sets P0.3 as RXD0

	...

//	PCONP |= (1 << 24);							//this powers on UART2
//	LPC_IOCON->P0_10 |= 1;						//this sets P0.10 as TXD2
//	LPC_IOCON->P0_11 |= 1;						//this sets P0.11 as RXD2

//	PCONP |= (1 << 25);							//this powers on UART3
//	LPC_IOCON->P0_0  |= 1;						//this sets P0.0 as TXD3
//	LPC_IOCON->P0_1  |= 1;						//this sets P0.1 as RXD3
Personal tools
Namespaces
Variants
Actions
Navigation
Articles and Tutorials
Shortcut (mini SUN7)
Toolbox