嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ R* ^; r* ^/ u" M/ S% J; b$ Z: m7 N
Void UPP_TASK(Void)
4 A$ U. x" q& d7 ~. [! N
{
& r# q2 l& u+ X/ o, n
% K$ j/ R, y M7 b
int i,j,k,target_int_count=2;
. Z0 ~1 @+ c1 E* Y1 A' w* X4 r
char ch[2];
" g, ]6 l: R- B; z
& |" b& Y9 I) q) h8 b8 K1 r6 U& U# [, Z* F
6 R9 b# q9 m4 y, p" l
7 O7 |5 c. y7 I# e& p. ]
upp_interrupt_count = 0;
F" g9 X; d/ ^
upp_error_count = 0;
) p, g; @+ G& v9 G% P G8 V
0 D8 H, r' m& ]4 h+ c" `8 n* ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! M9 H* p) I6 Y3 F' M
// Initialize data buffers
8 k( f$ H3 n" ?% H. e* Y) e
for (i = 0; i < upp_frame_size; i++)
1 U' c3 P, ^- v
{
5 `; v, R0 A$ |7 V
upp_buffer_b
=i;
8 j; s5 j& n% n6 I# A2 G
upp_buffer_a
= 0xDEAD;
3 n3 L- Y4 {4 a8 l' S
}
! t; }) f' v) N1 ]& s
8 X, n$ t5 V1 u, Z# m. G
//for(i=0;i<1024;i++)
+ A+ ?) ]& S8 i- N
// temp
=0;
) p/ X$ u- K' q) t5 }$ w
) u! D! e' U% r9 W8 h5 b
//UPPReset();
+ W7 ^4 d0 i# V; |* I0 P* p
/*启动UPP DMA传输*/
; [, S q& I l" W
UARTPuts("upp_prog_dma_i\n",-2);
8 J6 }# X3 I% }5 s6 j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 q% y5 b8 M8 Q6 f; ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ K0 v G8 q; _% `4 k6 f
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' _& | t$ s: a5 r
5 B% G) f% m. r3 ^5 q
UARTPuts("upp_prog_dma_i\n",-2);
5 @$ o% w9 E7 Y( a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# I# u& n, r- b! T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' }$ A4 Z' S; ]3 j9 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! y' x% L& }4 a6 }% A0 E* v
$ Z d6 H. |; E8 I; V8 M6 Z
/*等待UPP传输完毕*/
" q, P- Z1 y, o! P$ B# W
//i=0;
! G" I: I9 r# z- l# z
//j=0;
0 {2 ~0 g7 o5 a" w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% k' J5 ^4 O! g& N! H+ q
{
6 ~4 D+ [, m* E1 ~5 y. \2 ]1 i
/* 测试UPP传输的同时操作普通DDR数据
# u( Q. ?) y3 f* y1 ]1 R
temp
=i;
8 d5 a2 H1 R& A2 Q! y
i++;
* ` k7 q4 j+ v- c# Q5 e
if(i==1024)
7 s9 w7 @4 i% }- \# d1 Y8 i" f
{
6 A6 j: }/ a# W
i=0;
7 n( A4 c' U3 |* b
j++;
* J0 p0 d) |9 ~! B% K2 X
}
8 l' A7 L5 g, f$ N3 F! E
*/
4 V0 Y- J/ Z6 T) X7 T
) X+ i% e. m6 ?& \$ N* Q R+ h
asm(" nop");
a$ f) s" T2 }
# e% s; |. [+ P4 g/ o$ n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ O+ I, I) r9 `9 ~# F% ~/ p
}
8 R m6 E# Y* M6 k! B8 ]7 U7 ?
+ b* ^5 [8 H# g5 [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 \0 b, @0 N/ f! g$ d- N' T
//UARTprintf( "i=%d\n",i);
. v* ^ T# I0 c0 S3 T$ Q; C4 x0 b; I
//UARTprintf( "j=%d\n",j);
* J9 u) p, O1 l
UARTPuts("Data mismatch in buffers.\n",-2);
# d" y1 t" M8 U) _% G' h! s
if (upp_interrupt_count == 2 && upp_error_count == 0)
. y8 P0 u8 d a
{
9 y1 h/ Q3 F; ?8 a5 M1 C
for (i = 0; i<upp_frame_size; i++)
, k+ R: x6 A- m) M3 l
{
- q% r/ c# w, b4 A) a
if (upp_buffer_a
!= upp_buffer_b
)
. D' v0 p d+ L7 ~/ M
{
1 s# q/ X& {5 w7 b3 W
upp_error_count++;
9 h. W( p" O+ d! ]: b0 l# J" z
}
) [- t3 r) {; a2 I! ?* [. _0 ]
}
- q: R+ v9 K' M* n
}
9 p! e. j4 Y, I) m
! P1 g3 t! b2 _1 X A
/* 报告通信结果*/
) w* w6 ~! q" d( O$ _( `2 q
if(upp_error_count != 0)
& r/ n+ V# S3 j9 w+ ?( Z8 S; ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- z$ k" u) ^4 o& f4 L- K
else
) `0 N9 ^" r7 I5 e8 \1 t& e& M( d+ U4 S
UARTPuts("uPP transfers complete!\n",-2);
5 U9 q$ k( Y) N2 G* S+ V1 d/ b, Y* r* f
& k, Z& O5 a) J1 [! `
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; W& i" D+ T5 S) a5 \
UARTGets(ch,2);
: ?0 ^$ A! h9 m5 i$ M
UARTPuts("\n", -2);
; @! `6 E# @* J6 z) @- P7 z
1 ^7 N( H4 T; K. D6 d5 J
if(ch[0] == 'y')
+ d' B* p7 U: H+ X) ^, N) b4 F
{
_$ Q1 G f7 @3 J/ o3 \! y
/*打印全部读到的数据*/
6 k; x; L7 w( T9 o
for(i=0; i<upp_frame_size; )
) Z3 _7 k5 ]! c6 B* u+ H
{
; \. B4 a0 b# U( n
for(j=0; j<5; j++)
: U" I! {5 Y( z( O s+ A
{
1 X4 c- o$ M' m7 D/ b8 F j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: x/ C. J {5 E
i++;
. B$ L2 R4 \* h3 ~$ S
//if(i >= 4096)
L) |+ c' x) I
// break;
2 D; I k' N4 y* }
+ G, d( n; S" g: S$ J( g
}
( o+ }2 o0 K$ m+ ?6 Q4 l
UARTPuts("\n",-2);
( a6 A# v( J. A, t0 K# U9 S2 h+ O
}
5 v' `( h& c& r4 X+ l% p ?
}
- O7 u% a# \1 z) {# ]
3 Y- Q; [. H: L ?# ?, Z
}
0 e. q6 v" {$ R' |/ R1 @
, v3 T) i: T2 q! A/ _' ]& C \7 ?
' i7 p# U( V9 X- `& ~3 ]! O$ o, [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' m* q: O, G1 Z+ \: h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 v% |& e; q- c0 E
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4