嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# b" Q4 S/ B4 B! N- ]- _
Void UPP_TASK(Void)
: A m* t e7 p
{
* W. m2 H. x8 h4 m7 b8 T2 V
. _2 ^0 @! t4 G# U$ V% ~
int i,j,k,target_int_count=2;
3 `) `/ O3 z/ @# ^
char ch[2];
% y4 b, n) A* A. Q( `
8 x; z, m y6 s
. Y0 S( X0 [! {- {( P( ~4 G
o( s1 Y5 n7 m- J8 ~4 r
upp_interrupt_count = 0;
. @' a0 n$ d8 o0 i- R
upp_error_count = 0;
2 b. ~! }7 l2 b- C2 D
" K2 w1 l2 {1 o# F1 U" A0 ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' R A1 y3 Y* y4 c; P8 ?- c& }
// Initialize data buffers
% V) ?% l) l- t1 ~8 V
for (i = 0; i < upp_frame_size; i++)
1 h5 {' ^% V6 p7 @+ k# ?
{
7 P0 F% @# q6 ^) U6 w' f
upp_buffer_b
=i;
7 J9 F/ j5 b+ z4 D/ l. B7 |
upp_buffer_a
= 0xDEAD;
5 t9 E; c9 f* M5 i9 Z3 b8 ]
}
4 q* e3 n. `( O( ~; L
6 m8 f- Y' j- _2 P) a' i
//for(i=0;i<1024;i++)
; x! `2 m5 e3 l* F9 O1 b( {
// temp
=0;
* l( D* q3 P/ E3 k
% H+ S: H; Z; z$ a/ q' B3 q' x$ V
//UPPReset();
1 ~3 w( V7 W* d) ~
/*启动UPP DMA传输*/
2 z5 Q: H A% _# O$ s7 n
UARTPuts("upp_prog_dma_i\n",-2);
" s d+ ^( t/ l4 g r( |) [; r" m+ s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" m! T# t) v2 x+ z, W' }$ u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 {, y7 v7 a$ B6 P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) }0 }# S5 a* f- }$ S7 o2 ~
5 N$ h% }% Y9 |
UARTPuts("upp_prog_dma_i\n",-2);
" k+ e6 s5 M" F& s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% F6 v5 _2 n2 U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 c5 ?4 A( o7 ^2 X7 F
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 C, p: b* a. M8 w0 F8 X* u
8 z, ^* l# t9 A+ k. Y
/*等待UPP传输完毕*/
7 |3 v& x8 Q. E
//i=0;
% i+ {& O% O( \5 d$ p; i
//j=0;
' I# |9 J8 l1 w" A' J* b3 t5 V" X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ ^$ k- }$ O( i- w# c
{
, N, E( D. t" M, R
/* 测试UPP传输的同时操作普通DDR数据
9 w7 ]! t; x3 W+ C
temp
=i;
' @& |) j) } ?; A2 d) e `
i++;
8 c# }: ^5 S* X. A- E( p' l9 z- z2 D
if(i==1024)
. z4 x: G# @: a3 z4 S
{
* ?" D1 ]6 o+ ~% Y* y
i=0;
, y6 _9 K0 c6 V
j++;
. Y- V! e% w3 K5 d V/ h
}
0 i* \# N6 r. A0 h: }
*/
+ I1 I2 H# F6 |- o. g8 L3 c
- N w5 e6 m* i3 f$ f; `) Q7 |
asm(" nop");
* P) F4 K; a8 e, K% b/ R
- a1 P0 \% q1 L5 l! j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 R. a* n* }1 u1 h2 r% Q
}
& m* L% |% s* M D6 U: W
, z4 o. g5 p) \3 U# N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; ]. H+ _& V7 ?
//UARTprintf( "i=%d\n",i);
6 w, k3 ^' T' y" U, L
//UARTprintf( "j=%d\n",j);
, Y/ c6 r" I$ u5 Z$ M: X
UARTPuts("Data mismatch in buffers.\n",-2);
3 d" ~9 S. Q! A) s2 D" |
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ E$ h: G6 d+ r7 Q- x i
{
* @1 i N1 r% e1 |' Y1 R
for (i = 0; i<upp_frame_size; i++)
0 p1 ?5 b2 }4 N
{
* Y" ]0 b) k5 r
if (upp_buffer_a
!= upp_buffer_b
)
$ F/ U7 ]6 _ [3 o" }
{
j X* G; q: V4 `. d
upp_error_count++;
, [0 R- H( N4 S4 n" L1 X) C1 X
}
/ ^6 R0 K- s2 L! z+ ?9 T
}
k6 f8 P' F/ P# C/ B
}
1 h% `* i/ C5 [; ~- [( ?2 S
/ i. Q( [1 E- e8 v" |) a
/* 报告通信结果*/
! L+ L+ N7 f6 d' w2 \$ o8 @
if(upp_error_count != 0)
' X* L! w9 H O$ J" T7 f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; B& k4 r1 x1 k, q5 v
else
8 ]* W, ^- L2 W; `. S" s
UARTPuts("uPP transfers complete!\n",-2);
6 J8 y5 H& @" F1 Q8 |7 V
6 A- M5 m5 @1 c4 M; o5 r! G$ k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- p. H$ L: A5 \, o$ J* g( W7 V
UARTGets(ch,2);
/ i( \$ h+ }6 _0 b
UARTPuts("\n", -2);
$ J2 J; w; _, V' g
! v' {% c9 H% I0 }3 S2 k
if(ch[0] == 'y')
5 u' u( }) V* b3 V) V4 ]1 R4 b
{
& O, Z( w* e; _2 _- z! R
/*打印全部读到的数据*/
$ u7 {4 q8 N5 L) ~9 B4 K1 O
for(i=0; i<upp_frame_size; )
1 h% ], _5 v d& ?/ p! x. b
{
2 U" o5 x3 d9 `* J! f2 w/ j" p
for(j=0; j<5; j++)
9 B/ _' }) C8 |6 U$ V% c! r5 F
{
A$ J+ }* P2 e# K8 W5 W9 h. |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- v' B- c5 Q$ x9 D7 y/ c
i++;
" e0 S1 g9 F* ~4 v. Z F' y
//if(i >= 4096)
# }5 S$ A1 R$ d4 \! W
// break;
* @: k4 b- B9 R
. O) }5 _+ {3 V
}
0 M- V4 k: G! H1 ?& O% b7 `
UARTPuts("\n",-2);
/ {7 X9 q7 |# v7 U7 z- S
}
3 g3 f4 F( }; K. `0 U7 O
}
3 `6 f8 [: B. d) R+ v
1 O0 H7 \( H7 v* H6 B5 b
}
9 O% r; k% \8 Y$ Z; H
3 j% P5 w0 q( E# M8 |1 z' |; I6 q
- o6 g1 d+ N7 c. k. D& j) { v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ O! j8 |! p) c, C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, B- Y7 i0 b9 K" y0 T2 P
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4