嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) F, r2 l, o, B0 d9 Q+ q. ^5 ]9 F5 q
Void UPP_TASK(Void)
- y5 {4 d# S. r& G$ ]
{
# B, M( w0 g1 o% D/ C; r
; L$ U! z, C5 I
int i,j,k,target_int_count=2;
/ [9 B: \, L r+ `' k6 ?
char ch[2];
, L# g! A! E W8 v4 H0 o% ]
( E, L, \9 n3 d
7 D1 [) P! r ^7 A
& c7 m9 w K1 P9 _& t6 f4 e
upp_interrupt_count = 0;
7 g1 a6 F. e+ r. s4 ~" @& x/ E
upp_error_count = 0;
4 f; E: Y7 \( p& |/ A& ], ]6 r* b
: ?* o$ L4 {, o) e1 l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' B7 _$ p; m: w! v2 X
// Initialize data buffers
' @2 c8 d( ?6 e8 A! k
for (i = 0; i < upp_frame_size; i++)
- {' h' u$ |9 P5 J0 c
{
9 y+ Q; }$ v! G5 b* ], I( ^
upp_buffer_b
=i;
" ]# B; {% M4 t
upp_buffer_a
= 0xDEAD;
. ?. |5 ^6 L0 ~/ }: o9 m
}
- ^: }7 l7 B: }/ s& j5 O8 a
2 F$ D( ?+ p$ H z7 d
//for(i=0;i<1024;i++)
; J% G1 [. F/ y5 P- X7 p( I
// temp
=0;
5 f( L- d/ ?& r1 h$ ?
" U; ~$ _! _) i2 m) ?; `% i
//UPPReset();
) _9 \) L7 {+ E( Y1 z
/*启动UPP DMA传输*/
9 y8 m; ~8 z- S7 z4 A
UARTPuts("upp_prog_dma_i\n",-2);
0 ]+ a1 X5 `1 _. {: G$ c; y! R9 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% ^/ r" c1 d% f; J3 r r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* G% D5 o) K, A* S" M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) P" J+ U3 u0 d, }! v# v, _0 z
( ]4 w% X# X; e l) H6 {
UARTPuts("upp_prog_dma_i\n",-2);
. H$ N& h& [3 B3 M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ e1 t6 {# m7 f% r }+ M$ h' U- U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, I2 o: J% T* b6 Y# i$ Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 @. [% V/ ?$ i' K' d# d3 ` O
. {' S4 C' |, w, O3 v. T1 r( s! O
/*等待UPP传输完毕*/
" |% Y% i6 V/ K5 x/ E
//i=0;
9 t; P" s" @. e, P/ I+ u" O
//j=0;
: Z4 `4 E' D+ k, N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% e8 S$ b' ?4 w, r( K1 F1 n
{
; J: W3 \0 C, [4 x1 i. A
/* 测试UPP传输的同时操作普通DDR数据
2 A W9 @6 D- I5 |, d5 k0 O
temp
=i;
) [& w, E5 U, `' i. z6 K, M( k
i++;
$ N! U+ [( R/ H; Q
if(i==1024)
; X" t e6 d0 O: n. Q: N$ {6 H
{
, A3 ]+ R: }# {
i=0;
$ H2 m) k7 k0 a2 ?& p$ w
j++;
; m( {! u# Z" _* P# v; Z
}
( _" P% q" j4 f& l. E) K4 S
*/
1 v4 Q9 y- _7 u/ c
5 x% Q% F6 u& ]! V( y
asm(" nop");
4 {! E% Q) b- I$ P5 s7 }
; B" G7 L- i3 U e) `0 d ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# l' `% ~7 Y# E8 H/ m% _
}
, @ G# k! }- [3 n
# L6 I' M* w# H T7 i7 G5 c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, w$ v* H7 a; l K+ j
//UARTprintf( "i=%d\n",i);
1 j) _' ^* r) C% `$ k( S9 J6 W
//UARTprintf( "j=%d\n",j);
4 |% D) T: J% o, f; ]/ r
UARTPuts("Data mismatch in buffers.\n",-2);
3 m' x5 T5 j& k) \# d. A2 K5 z
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ X& @- ~: C- A* s
{
0 j& v, `2 N. e d# s* y' d4 U( L
for (i = 0; i<upp_frame_size; i++)
& s& V' @$ P; [, c" A
{
/ g( Y0 E9 a3 w0 E" L; Y9 z8 f/ H) H
if (upp_buffer_a
!= upp_buffer_b
)
: P; `5 ~! t4 N; ~; ~
{
0 |2 e$ Q) V+ i2 g; Z2 Q" l
upp_error_count++;
7 K7 `- }) e7 n
}
+ h) Z' b* c: P$ D
}
& O( a2 x! \# [8 N; k% H/ b/ K
}
( r$ @5 Q7 I0 @# b3 `6 |1 D
+ O B* ^- m1 ~( `) z" q
/* 报告通信结果*/
2 h& y5 y6 r, r5 j" @3 A
if(upp_error_count != 0)
; Y/ o) L+ D' S% s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' ^; S4 O4 \1 p i& L
else
% \) j, m( A6 Y; H* Z" h
UARTPuts("uPP transfers complete!\n",-2);
1 G9 G* r" i* y; q# l, ]8 t
: C) V. k7 w: u- D/ ^* \3 d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; u( K3 ^- J% |
UARTGets(ch,2);
, m7 f: L P; K0 u
UARTPuts("\n", -2);
8 X: |- j! L `% O. G/ @' J2 _
; Y' r$ y' U7 Y4 A' r$ W: F8 D: k2 q/ p
if(ch[0] == 'y')
3 f4 D0 C( ~! \! ]! \7 l9 x
{
: o* Z+ ^! r" Z+ O
/*打印全部读到的数据*/
6 z) n; J, r' d
for(i=0; i<upp_frame_size; )
% |& `0 N4 U( k6 k
{
; h, g. H" @& y0 h, _/ O4 |7 m ]
for(j=0; j<5; j++)
T! O) y- R! U/ W. \; ~
{
/ g. C4 I( d J* |. q: G3 v- v1 H. n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 S f9 q5 R/ ~
i++;
9 L5 \0 f2 S* H0 @$ \9 Z5 D
//if(i >= 4096)
* Z. l, D/ x. L) r- L' ?* [; e
// break;
f& D% Q# ]* |
/ G- R2 Z0 A% ^; n
}
. M% O5 G8 ~9 |! q
UARTPuts("\n",-2);
. |7 S ^0 p6 ]$ _7 b! G
}
: e! O, d$ }& _ A: V5 Y
}
; x3 J" m! J. {/ P) z6 T: a; k
* |7 b# H9 W! b p t
}
5 } [+ @! u) {# [! H
2 L( x+ Q8 G( f/ J0 j* N/ t
5 E3 N+ o @; V+ d1 ~' a6 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ]& t, g$ Z+ ]7 R8 f6 K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; F; _2 n! K& @9 O" Z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4