嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 g, i# F. d& n2 [& S
Void UPP_TASK(Void)
( ?( `0 b; R X1 r5 M: g
{
# _/ j9 L! M! ]3 u+ v2 z6 W- |
" ~0 C0 D! i8 Z
int i,j,k,target_int_count=2;
. n9 P$ B! K% R, g% K/ b9 n
char ch[2];
- n- B% P. F" l+ Y- I
0 d1 `9 g: ?7 ^# T# c% V2 S5 Y
: Y4 z3 W6 W$ Y4 C
$ o/ H) ?, x n! _" Z! J$ g
upp_interrupt_count = 0;
$ w# G8 I( X5 B
upp_error_count = 0;
0 Y, V" t& v, U" o
# @; `0 @1 P( L
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# p( |4 h6 i- ~- c0 U9 }+ `
// Initialize data buffers
! }1 W8 W+ s3 \; u6 }+ B* P
for (i = 0; i < upp_frame_size; i++)
* c9 f: L3 g# f
{
, |6 `. x* r6 T8 c D' u
upp_buffer_b
=i;
8 B) j* [( Z) N/ _4 c" w( f
upp_buffer_a
= 0xDEAD;
: B3 `" c8 R1 ]7 _ q9 @7 c+ M4 D
}
. Y+ o, M! o$ @+ j4 T
5 S) B0 ~5 B5 r! e2 w
//for(i=0;i<1024;i++)
% E3 m, L n* N+ g
// temp
=0;
" W" W3 C: K( d6 S! i
6 L2 v8 c+ C2 Z3 V+ ]' J; B0 z
//UPPReset();
- y+ h8 q3 b% V0 E& T8 O
/*启动UPP DMA传输*/
3 M/ a, a3 i1 }! h3 R, \
UARTPuts("upp_prog_dma_i\n",-2);
# Z4 Q9 S8 K( J! X$ `6 e. A% z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 P! M9 F% }! G# `) n& P& S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 a8 b9 _; w( \0 i% {
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) x2 T9 [6 a. H2 p( c
5 Q" [% q! K% E
UARTPuts("upp_prog_dma_i\n",-2);
1 V! n, m6 I. I$ ]* f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# L9 e4 A5 W- `9 j- v
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 g0 ^, m, o5 D2 q; F/ k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 w" O9 T. A8 j- V4 S1 c
6 L. }- M& f" Z' a3 N
/*等待UPP传输完毕*/
! D v0 P Q: u) x) R T
//i=0;
7 T! S5 ?( o& @4 B }
//j=0;
) c# D& P8 C$ v
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 j3 _, g% n* j1 f( F
{
& K! W% D' ]" w1 C. K+ @7 N# X; R
/* 测试UPP传输的同时操作普通DDR数据
, O. C# z9 X( P9 Q$ Y) s
temp
=i;
+ P) E4 l( o0 w9 T0 b/ @
i++;
+ ]0 E8 x$ S, i/ ~$ H1 B& C5 z
if(i==1024)
/ H+ l8 m! k* a" A9 D
{
: c- z* x" X; b9 @- {- Z6 b
i=0;
% W5 @3 X4 p2 E* Z+ {$ ^
j++;
' ~& W2 J, v2 W* w
}
7 h6 ?* s7 k: ]6 v5 A
*/
; t) ~& ~1 P- p
# p6 P- R/ t6 h6 }: B5 [
asm(" nop");
. b+ B6 j ~. i2 m4 z% P# ?: q
+ l- n' ]: _; V, C; K: [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 H" X8 S0 J; z ~$ q3 O6 ~9 e
}
/ Y; a; z# B( p; Q4 ~
i: g7 x+ _% D) O) N6 j' m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ @1 |/ ^2 K, Y. J
//UARTprintf( "i=%d\n",i);
: C! m8 K1 `( d+ |" u. e r
//UARTprintf( "j=%d\n",j);
2 H! ]1 `; s9 Q' p$ u
UARTPuts("Data mismatch in buffers.\n",-2);
' h$ o3 T. ` z& a+ S; e7 ^8 ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
, Z2 C3 ~$ E9 O- [! m0 x
{
( B% T& E8 d- u L3 b
for (i = 0; i<upp_frame_size; i++)
/ ]9 l7 _( g* n# L! c
{
3 W% E7 w/ s- R5 B5 x
if (upp_buffer_a
!= upp_buffer_b
)
* H" `8 e m, V/ _) r, G" W3 m+ Y! N
{
* J+ N. B0 O9 l6 `/ h" S0 H
upp_error_count++;
! o+ j" v x4 D& Y
}
& ^8 R; g' W' x9 V
}
) M4 E* I" h1 \: q0 ^& [* d# V
}
/ x- r V( }% ]0 c
. p0 u& |* S" @6 K2 j; W' [; W
/* 报告通信结果*/
5 \: ^$ a9 I! \9 r* T
if(upp_error_count != 0)
6 M5 i/ a1 J$ n" [# @# A3 v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# \( y3 y2 P2 B4 |" R
else
8 a% ?3 m% ?/ {. f% Q0 y
UARTPuts("uPP transfers complete!\n",-2);
% F1 V5 l6 t* p( h! k
X) I2 b' D4 F+ _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. P' Y. J! n% }8 o+ _' p
UARTGets(ch,2);
5 E j% {* ], ]
UARTPuts("\n", -2);
! Z/ {/ \" R: s$ ~9 Y" W
& m9 a, O9 o+ {! G
if(ch[0] == 'y')
2 Z+ L3 D: m2 a, p0 {* E& x
{
. T; _/ f9 `/ x2 P, y) X- o3 ?+ O* H) L
/*打印全部读到的数据*/
) } k6 k) B! e! I% f+ R/ E
for(i=0; i<upp_frame_size; )
& l1 M5 Q; y$ l0 Q8 R; J
{
K! m+ ]2 Y; \& Q- ~: n( p. F; {
for(j=0; j<5; j++)
* q$ |8 o4 h2 v; o9 d( W; m
{
. P( V3 f, O% g3 r% F" u/ b+ |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ |' S# i' g$ u. X# ]& z+ Q
i++;
- z! q" _: L d: } V- G
//if(i >= 4096)
5 C2 m# d+ P. s; u* r4 G/ \- K
// break;
, B* s2 w, ?0 ~6 P
3 T- b/ ?5 h V3 e
}
O' [" w# c K7 _
UARTPuts("\n",-2);
: Q- v( [8 p* k0 [; e3 Y
}
& b2 m2 G5 I7 o' m: N0 C
}
8 ?8 G: X( H. x; J8 X
# s5 h" V; T" B) `# C( E# A
}
: p, s7 ^7 L/ W' m& s3 X
% B3 ^% m. v6 ]5 c7 c
" ^4 B l+ B) W* n2 @
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" |, A1 y+ H6 c2 ^! u0 T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" M$ B ?" @( p
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4