A
Aashu
Guest
: أصدقاء DHello ،
أنا أستخدم LPC2214.انا مبتدئ في هذا التحكم.لقد كتبت لرمز الاتصال التسلسلي الذي ينقل بنجاح (كما راجعت على محطة المفرط) ، ولكن غير قادرين على الحصول عليها.رمز يتم لصق أدناه.أنا أستخدم رولي في Crossworks أرمينيا لتحميل النسخة التجريبية من صافي باعتبارها بيئة تطوير متكاملة.يرجى الاشارة الى خطأ في رمز.وأنا أيضا البحث عن بعض رموز العمل مع هذه العينة المتقدمة بيئة تطوير متكاملة ، حتى إذا كان هناك أي واحد ، الرجاء ارسال عينة رموز العمل على الاتصال التسلسلي ، المقاطعات المؤقت الخ.
كما لدي بعض الاستفسارات mentiioned وتحت ، الرجاء الإجابة :
1) ما هو تدفق الصحيحة لكتابة المسلسل الروتينية للإتصالات (الإرسال والاستقبال)؟
2) ما هي سجلات ليكون initialised ومع قيمة ما إذا أنا باستخدام UART0
3) كيف يمكنني تقديم المسلسل المقاطعة وظيفة تنفيذ عندما أتلقى شيئا على UART0 المسلسل.
4) وفي Crossworks ما هي الطريقة لتحديد الحاجة الى المقاطعة وظيفة.وكيف
مترجم حان ليعرف أنه هو المسلسل طلب الميزانية الإضافية الدالة.الشكر والتحيات ،
Aashuالرمز هو على النحو التالي :
/*_________________________________________________________________*/# تشمل <targets/LPC22xx.h>
# تشمل <stdio.h>
تعريف # UART0_INT 6
تعريف # TEMT (1 <<6)
تعريف # READ_P3_0_7 (IO3PIN & 0xff) / / قراءة البايت أقل من P3
تعريف # WRITE_P3_0_7 (ب) ((IO3PIN = | 0xFF) & = ب) / / الكتابة البايت أقل من P3تأخير باطلة (كثافة العمليات) ؛
ser_initialise باطل () ؛
serial_tx_byte اغية (غير الموقعة تشار l_uch_data_port) ؛
غير الموقعة تشار UARTReadChar () ؛غير الموقعة rxchar شار ؛
ساكنة باطلة uartISR (الفراغ) __attribute__ ((المقاطعة) "IRQ")))؛
ساكنة باطلة uartISR (الفراغ)
(
/ * آي آي آر للقراءة واضحة المقاطعة ومعرفة سبب * /
آي آي آر غير الموقعة = U0IIR ؛
serial_tx_byte ( 'ا') ؛
/ * * المؤشر UART المقاطعة /
التبديل ((آي آي آر>> 1) و 0x7)
(
الحالة 1 :
/ * * THRE المقاطعة /
كسر ؛
القضية 2 :
/ * * قانون التمييز العنصري المقاطعة /
rxchar = UARTReadChar () ؛
serial_tx_byte (rxchar) ؛ / / لا تعمل
كسر ؛
الحالة 3 :
/ * * المتلازمة المقاطعة /
كسر ؛
القضية 6 :
/ * * الصمامات المقاطعة /
كسر ؛
)
/ * تحديث مركز فيينا الدولي الأولويات * /
VICVectAddr = 0 ؛
)غير الموقعة تشار UARTReadChar ()
(
في حين أن ((U0LSR & 0x01) == 0) ؛
U0RBR العودة ؛
)serial_tx_byte باطلة (تشار l_uch_data_port غير موقعة)
(
U0THR = l_uch_data_port ؛
في حين (!) U0LSR & TEMT)) ؛
)
ser_initialise باطل ()
(
PINSEL0 = 0x5 ؛ / / التهيئة الدبوس بلوك اختيار لتكساس وآر إكس
U0FCR = 0x7 ؛ / / لتمكين يخرج أولا وإعادة لهم
U0LCR = 0x83 ؛ / / مجموعة DLAB وطول الكلمة لتعيين 8 بتات
U0DLL = 0x28 ؛ / / بالباود لتعيين 9600
U0DLM = 0x0 ؛
U0LCR = 0x3 ؛ / / بدون DLAB
U0FCR = 1 ؛
/ * الإعداد UART آر إكس المقاطعة * /
VICIntSelect & = ~ (1 <<UART0_INT) ؛ / المقاطعة IRQ * * /
VICVectCntl0 = (1 <<5) | UART0_INT ؛ / * استخدم فتحة 0 لزر المقاطعة * /
VICVectAddr0 = (صحيح غير الموقعة) uartISR ؛ / * إعداد زر طلب الميزانية الإضافية * /
VICIntEnable | = 1 <<UART0_INT ؛
U0IER = 1 ؛
__ARMLIB_enableIRQ () ؛ / * تمكين المقاطعات العالمية * /
)/ / تأخير
تأخير باطلة (كثافة العمليات د)
(
ل(؛ د ؛ -- د)
؛
)
/ / ابدأ الرئيسية
كثافة العمليات الرئيسية (الفراغ)
(
كثافة العمليات ط ؛
__ARMLIB_enableIRQ () ؛ / * تمكين المقاطعات العالمية * /
PINSEL0 = 0x00000005 ؛
IO0DIR = 0x000000F0 ؛
/ / PINSEL2 = 0x00000000 ؛
ser_initialise () ؛
IO0SET = 0x00000020 ؛ / / طريق تبديل الصمام
تأخير (200000) ؛
IO0CLR = 0x00000020 ؛
تأخير (200000) ؛في حين (1)
(
IO0SET = 0x00000020 ؛
serial_tx_byte ( 'م') ؛
تأخير (100000) ؛
إذا كان (rxchar! = فارغة)
(
IO0CLR = 0x00000020 ؛ / / لو حصل أي حرف
/ / تأجيل الصمام
كسر ؛
)
)) / / نهاية "الرئيسي ()"
/*_________________________________________________________________*/[/ ب]
أنا أستخدم LPC2214.انا مبتدئ في هذا التحكم.لقد كتبت لرمز الاتصال التسلسلي الذي ينقل بنجاح (كما راجعت على محطة المفرط) ، ولكن غير قادرين على الحصول عليها.رمز يتم لصق أدناه.أنا أستخدم رولي في Crossworks أرمينيا لتحميل النسخة التجريبية من صافي باعتبارها بيئة تطوير متكاملة.يرجى الاشارة الى خطأ في رمز.وأنا أيضا البحث عن بعض رموز العمل مع هذه العينة المتقدمة بيئة تطوير متكاملة ، حتى إذا كان هناك أي واحد ، الرجاء ارسال عينة رموز العمل على الاتصال التسلسلي ، المقاطعات المؤقت الخ.
كما لدي بعض الاستفسارات mentiioned وتحت ، الرجاء الإجابة :
1) ما هو تدفق الصحيحة لكتابة المسلسل الروتينية للإتصالات (الإرسال والاستقبال)؟
2) ما هي سجلات ليكون initialised ومع قيمة ما إذا أنا باستخدام UART0
3) كيف يمكنني تقديم المسلسل المقاطعة وظيفة تنفيذ عندما أتلقى شيئا على UART0 المسلسل.
4) وفي Crossworks ما هي الطريقة لتحديد الحاجة الى المقاطعة وظيفة.وكيف
مترجم حان ليعرف أنه هو المسلسل طلب الميزانية الإضافية الدالة.الشكر والتحيات ،
Aashuالرمز هو على النحو التالي :
/*_________________________________________________________________*/# تشمل <targets/LPC22xx.h>
# تشمل <stdio.h>
تعريف # UART0_INT 6
تعريف # TEMT (1 <<6)
تعريف # READ_P3_0_7 (IO3PIN & 0xff) / / قراءة البايت أقل من P3
تعريف # WRITE_P3_0_7 (ب) ((IO3PIN = | 0xFF) & = ب) / / الكتابة البايت أقل من P3تأخير باطلة (كثافة العمليات) ؛
ser_initialise باطل () ؛
serial_tx_byte اغية (غير الموقعة تشار l_uch_data_port) ؛
غير الموقعة تشار UARTReadChar () ؛غير الموقعة rxchar شار ؛
ساكنة باطلة uartISR (الفراغ) __attribute__ ((المقاطعة) "IRQ")))؛
ساكنة باطلة uartISR (الفراغ)
(
/ * آي آي آر للقراءة واضحة المقاطعة ومعرفة سبب * /
آي آي آر غير الموقعة = U0IIR ؛
serial_tx_byte ( 'ا') ؛
/ * * المؤشر UART المقاطعة /
التبديل ((آي آي آر>> 1) و 0x7)
(
الحالة 1 :
/ * * THRE المقاطعة /
كسر ؛
القضية 2 :
/ * * قانون التمييز العنصري المقاطعة /
rxchar = UARTReadChar () ؛
serial_tx_byte (rxchar) ؛ / / لا تعمل
كسر ؛
الحالة 3 :
/ * * المتلازمة المقاطعة /
كسر ؛
القضية 6 :
/ * * الصمامات المقاطعة /
كسر ؛
)
/ * تحديث مركز فيينا الدولي الأولويات * /
VICVectAddr = 0 ؛
)غير الموقعة تشار UARTReadChar ()
(
في حين أن ((U0LSR & 0x01) == 0) ؛
U0RBR العودة ؛
)serial_tx_byte باطلة (تشار l_uch_data_port غير موقعة)
(
U0THR = l_uch_data_port ؛
في حين (!) U0LSR & TEMT)) ؛
)
ser_initialise باطل ()
(
PINSEL0 = 0x5 ؛ / / التهيئة الدبوس بلوك اختيار لتكساس وآر إكس
U0FCR = 0x7 ؛ / / لتمكين يخرج أولا وإعادة لهم
U0LCR = 0x83 ؛ / / مجموعة DLAB وطول الكلمة لتعيين 8 بتات
U0DLL = 0x28 ؛ / / بالباود لتعيين 9600
U0DLM = 0x0 ؛
U0LCR = 0x3 ؛ / / بدون DLAB
U0FCR = 1 ؛
/ * الإعداد UART آر إكس المقاطعة * /
VICIntSelect & = ~ (1 <<UART0_INT) ؛ / المقاطعة IRQ * * /
VICVectCntl0 = (1 <<5) | UART0_INT ؛ / * استخدم فتحة 0 لزر المقاطعة * /
VICVectAddr0 = (صحيح غير الموقعة) uartISR ؛ / * إعداد زر طلب الميزانية الإضافية * /
VICIntEnable | = 1 <<UART0_INT ؛
U0IER = 1 ؛
__ARMLIB_enableIRQ () ؛ / * تمكين المقاطعات العالمية * /
)/ / تأخير
تأخير باطلة (كثافة العمليات د)
(
ل(؛ د ؛ -- د)
؛
)
/ / ابدأ الرئيسية
كثافة العمليات الرئيسية (الفراغ)
(
كثافة العمليات ط ؛
__ARMLIB_enableIRQ () ؛ / * تمكين المقاطعات العالمية * /
PINSEL0 = 0x00000005 ؛
IO0DIR = 0x000000F0 ؛
/ / PINSEL2 = 0x00000000 ؛
ser_initialise () ؛
IO0SET = 0x00000020 ؛ / / طريق تبديل الصمام
تأخير (200000) ؛
IO0CLR = 0x00000020 ؛
تأخير (200000) ؛في حين (1)
(
IO0SET = 0x00000020 ؛
serial_tx_byte ( 'م') ؛
تأخير (100000) ؛
إذا كان (rxchar! = فارغة)
(
IO0CLR = 0x00000020 ؛ / / لو حصل أي حرف
/ / تأجيل الصمام
كسر ؛
)
)) / / نهاية "الرئيسي ()"
/*_________________________________________________________________*/[/ ب]