嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: k7 W! J/ D2 n9 r/ T: f+ |, p
Void UPP_TASK(Void)
3 Z, ?4 a, q8 B) z+ l
{
" Y/ V+ E5 G' x; N6 `
6 A# z8 N0 ]/ I+ K; ~% K9 L; B
int i,j,k,target_int_count=2;
+ T$ l3 y9 ^% { m# c
char ch[2];
R$ F1 h' q) m2 U) x+ e1 U" b d' i
* M$ z* a* Q% n2 m8 K- E7 i% B
/ t8 |5 ]4 b+ a* ]/ N
1 M+ T* P* q! E" {
upp_interrupt_count = 0;
; [ x% D2 R1 Y# U5 W
upp_error_count = 0;
' h3 T) A/ `7 R) G) X
% b3 l# r( H' h4 g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. [4 `8 B, V5 w8 j. Z7 p/ v, L) C1 K
// Initialize data buffers
! \" G7 i1 A3 S5 z3 }9 T9 A$ G4 f' Z& Y
for (i = 0; i < upp_frame_size; i++)
3 V* _) t& L: U w5 ?( p
{
- k9 W( s, C1 F( V0 g$ G
upp_buffer_b
=i;
( j& t- w/ E4 C4 q0 B' c
upp_buffer_a
= 0xDEAD;
0 g Y6 r$ Z3 r7 y; e4 u4 T
}
4 f" O: l" p5 x) T
& D9 Q( r7 p" u, `( L
//for(i=0;i<1024;i++)
! \' D' ~6 c3 K8 L* w4 d( x: a
// temp
=0;
7 c$ i6 K# F- T" d0 i _7 P% u
+ V, B2 T& S: i' q4 w5 D0 D
//UPPReset();
' X2 W# P8 [* \, [% N/ W
/*启动UPP DMA传输*/
# w5 E# f$ N. h% M4 K0 R [) l
UARTPuts("upp_prog_dma_i\n",-2);
0 ?7 Z3 F+ c9 E5 R, H# K& L7 t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 Q$ {- n. d, Q! }( @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, P9 t7 j c/ E: K: ^8 [, l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: o+ r; ^4 R# @9 L0 D
; K5 }, E0 w0 }9 y) I
UARTPuts("upp_prog_dma_i\n",-2);
) g! A1 I- i& F0 o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: q$ x+ ^2 D8 e5 n) i7 f+ J! n$ ~. N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ S) P7 L2 M+ J9 Z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. }. a+ K0 E: |: c' k. Q
$ N$ \* Q# j V. L' \' v
/*等待UPP传输完毕*/
# Q) E2 s5 w. _
//i=0;
# z7 p( E, x, i& t$ {
//j=0;
4 O3 h( v, Z n. B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" l( H/ y, z. r( p$ i5 S. J
{
( `1 C# A! e! @2 N% E0 d- j. _ F2 C2 e
/* 测试UPP传输的同时操作普通DDR数据
$ N* I& u4 L2 p; Q" Z
temp
=i;
5 B8 B' N. e+ V4 i% R
i++;
6 C k2 m0 t/ w" b2 Y" e4 @8 Z
if(i==1024)
0 z' `4 E O; x5 o/ y
{
7 b( f5 S X2 ?6 ~
i=0;
8 @" b2 c1 }7 ]7 r5 Z
j++;
; Q0 T; s) z9 b0 p$ u8 d; U
}
: }5 T# P" A0 Q
*/
; d9 ~3 z# l# I' T9 \
" d7 \3 E+ g2 Y7 c7 L1 D- I0 O" h
asm(" nop");
# N. o' ]0 t& F( A$ [8 r4 n: p2 m
, D. k% O, ^$ d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 v/ I3 S2 a C! g
}
C! [3 Q3 K8 D/ c. }% N) H1 p
: N% C) O$ U" r0 P, I. [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' r0 n! X. W- r8 d# K
//UARTprintf( "i=%d\n",i);
4 i2 ~5 k% D7 ^
//UARTprintf( "j=%d\n",j);
5 w Z! b7 @& M/ f1 D
UARTPuts("Data mismatch in buffers.\n",-2);
5 B7 f' i; t4 _; J o- f* j
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 L$ N7 r7 C! N5 W$ o2 o
{
) Y: W5 ~9 q( a* r2 `
for (i = 0; i<upp_frame_size; i++)
2 o# p' v; ~" ^, y' ^
{
7 N6 v* j& Y. `1 i; ^5 R5 M, m8 z
if (upp_buffer_a
!= upp_buffer_b
)
" v6 q3 _! `1 k4 C: V9 T8 q7 J. F
{
: I ]7 C6 l( y0 D* O. p. l5 J
upp_error_count++;
; q' B* ^/ J/ _# J1 }
}
9 c7 d9 b2 s; {5 T1 p
}
/ q- A$ ]% K' X& z7 t3 A2 o
}
0 w, I% ?5 y( Z: F( F+ d1 X
7 t3 ?3 p7 F/ s" @$ h: F
/* 报告通信结果*/
" b3 ]" h6 Q/ [+ U
if(upp_error_count != 0)
# h% b8 K3 S1 w7 ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 z, V/ a+ f8 X, a. D- y
else
1 v/ ^1 L2 n; e+ }5 M* C
UARTPuts("uPP transfers complete!\n",-2);
' S+ | X' g1 ^
2 \9 d5 X6 D, F$ C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 r8 ^) {: W% T, {
UARTGets(ch,2);
5 Q3 w( H, A9 A6 E
UARTPuts("\n", -2);
& f% u. B3 H: H" J- p# m; k
8 u/ k* H3 S/ \1 \/ E' |
if(ch[0] == 'y')
" N9 A6 V6 b% S' E
{
0 U$ [2 C7 L$ Z2 _; _4 `7 `; @
/*打印全部读到的数据*/
5 E% B6 W& N. U3 r9 R) |* t
for(i=0; i<upp_frame_size; )
* d- m% q' d4 m# E* C) t; O5 t
{
8 s. c# v! P6 x# F
for(j=0; j<5; j++)
' F! P9 H E7 J2 M3 s
{
# Z& D0 b+ p; w3 ^. }) M" n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 H; @0 @$ A8 l: w9 A0 W) I
i++;
5 N3 c0 y3 _7 j! D) c) B' d
//if(i >= 4096)
) A; H) a& i$ C, D. ^
// break;
6 I, Q" {# \, ~8 c' J
1 y8 N9 w* w# D
}
. D) P" m; K9 u C! R; g# f G
UARTPuts("\n",-2);
1 E2 \8 X q6 d. u" `# {, f8 s
}
- d/ R+ A7 ]0 ~7 E3 o b- j! l& E9 G
}
[$ F$ T6 X( ?8 o% Z0 z. @
5 A5 T3 F8 o% T6 E' e
}
+ W# O$ h% i1 a3 x2 \2 y1 H8 a
/ W8 L P$ i. b! x% X% Z7 {
" A1 E* {/ {/ E, \0 c& p- }5 Q F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, J# v% g1 s8 f6 c2 t
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ L: H7 B7 K5 O6 d. S" D# b4 ]2 y6 v
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4