嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 o% k3 {/ k6 A; W
Void UPP_TASK(Void)
& R% V7 }) T8 S6 K4 R. ]
{
/ w% R5 ]% c2 ]8 e. n3 d
; M4 d2 H' O, X- ?2 s. P7 }
int i,j,k,target_int_count=2;
( L9 z5 i7 f0 |" R9 n
char ch[2];
8 i" m2 N8 K4 X; F0 [
0 z" F P" u( C: D' d) E7 j
1 e9 j- s7 I* Q& S0 {& t& z" S: F3 i
6 B2 Q$ j: n/ `4 P4 S: D% R* n8 _
upp_interrupt_count = 0;
. n% s/ B! w) W
upp_error_count = 0;
$ n6 u X' r" s' {7 M
0 \0 F$ Z; F! j+ q; [4 K" {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 B R' i7 v# B
// Initialize data buffers
6 G' R. p! u% @+ `, b. T& K# z$ d
for (i = 0; i < upp_frame_size; i++)
; O R0 E, H1 d% u4 U; }& T: I
{
( h0 {, t' M) v4 T1 u2 u5 K
upp_buffer_b
=i;
* l3 |: n0 G3 x+ u" a
upp_buffer_a
= 0xDEAD;
' L, I2 V3 X1 v
}
- u6 M/ R# p* b% y! T0 e( u; _
; ^8 [! G) s! D# d$ {3 F5 C
//for(i=0;i<1024;i++)
* d+ o* j5 b4 k- L( o+ J8 w" j
// temp
=0;
- i f0 w O( G" R
" M4 N2 f- Y( R S d+ ^
//UPPReset();
+ b: e0 }4 S9 V+ ?% ]+ h
/*启动UPP DMA传输*/
; v) j/ O& y4 O, {9 T0 V
UARTPuts("upp_prog_dma_i\n",-2);
5 i7 ^4 Q9 k- T: v+ B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 h! I; b& o3 b2 r7 u% e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* ^; |9 D' I' t' T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 Z' b0 v# \& r2 m* M
6 `5 _- G' {" i
UARTPuts("upp_prog_dma_i\n",-2);
0 ?. E; L' O: |: Z" h/ [" l8 U. ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- ~5 _! a7 L ]" }$ }0 |* m4 ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ^3 x+ M# A7 b& h, \1 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; N( o$ ^+ g! k; w
& i5 t% N! f% N* E. K3 D
/*等待UPP传输完毕*/
" u5 I+ C; O: w7 E
//i=0;
' L' H1 L1 _4 B9 F, S/ g# |
//j=0;
4 p0 x0 S) E/ ^# I3 ] } k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; J$ u/ Q# K3 A6 o1 Z6 b8 f4 k- u/ N
{
9 H+ t/ Z2 L0 t! J( j- l6 i
/* 测试UPP传输的同时操作普通DDR数据
; }* b* g! J: @9 F' S
temp
=i;
5 o# A$ o+ B# T- A. E5 m
i++;
; l* x. O8 m! T- \# u4 V& f
if(i==1024)
: }, C7 K! ^. S
{
& ?8 [/ |% O9 |/ ~7 ^ S1 M* Q' G* V
i=0;
; g2 Y U8 a* }8 v
j++;
! O+ D8 B, x+ t+ `( H8 ]+ |3 `- \
}
8 r# Y8 q) j' `
*/
( ~$ k5 ^& H U& W+ J. B- @
7 M) M. w! N2 }" s
asm(" nop");
7 Y" o9 d$ S, U8 j. E1 M
2 U# n5 e$ e7 ?5 O2 q" m8 e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) \. \4 X" S/ x0 W7 p4 y% G3 U
}
1 p3 f# p2 P& z
0 Y/ [$ Z6 K/ R) p/ C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' l1 {" O6 e7 L; }' [( S
//UARTprintf( "i=%d\n",i);
" M9 a0 X7 v- Z. b; O6 r* R8 } r7 M
//UARTprintf( "j=%d\n",j);
. n! C S1 Y. l, B9 {2 e5 C9 C
UARTPuts("Data mismatch in buffers.\n",-2);
9 t9 A: L0 u1 F7 E5 H
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 @, K' E/ }9 W; ?
{
9 J. r# g0 y; }! k3 w) q; S
for (i = 0; i<upp_frame_size; i++)
3 {/ s! ?( r4 q; H6 b
{
7 v/ K/ }, v/ b3 U+ o8 d/ [; l
if (upp_buffer_a
!= upp_buffer_b
)
9 T5 o, Y, j) @0 y
{
' y$ U" `) J, D. Z
upp_error_count++;
4 S3 i4 a" V( W2 k. Q
}
+ ~! k+ Q: w, e/ g# X6 w$ ?% J" \
}
2 r5 z! n: u& M
}
0 S: \5 b+ j6 h6 K' d7 _
% g0 a) W/ f, m" m. r6 K g
/* 报告通信结果*/
# X# \4 y# W% v/ q Z8 S5 m
if(upp_error_count != 0)
/ D5 ~: r) l, ~4 Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( p2 A' l6 m. v4 y2 J$ B! Z+ Q: ]
else
5 n" e, @# A/ V0 E
UARTPuts("uPP transfers complete!\n",-2);
+ l) \1 c7 o/ i: [
; ]4 L6 h4 V% {+ \
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 k$ T0 k. X; O: ^! ~; m. Y
UARTGets(ch,2);
7 F1 o8 |4 d! t* o
UARTPuts("\n", -2);
+ p7 q- J3 N$ k; s* J2 S( L' {
$ s: _9 E) l: }: y' v2 x ?! n" Q: x
if(ch[0] == 'y')
! W: M2 @6 [" L. F! y6 ~. |; @
{
: H! X4 K: u2 J& A( M! k
/*打印全部读到的数据*/
5 I5 e7 u+ P' u5 j
for(i=0; i<upp_frame_size; )
* f0 X: d2 U+ j% D1 r9 `$ \
{
8 L. e7 T( {, G3 d; z! e1 ^9 J0 E0 p! u
for(j=0; j<5; j++)
8 T$ Q% a3 l6 i) Z( Y4 ]( Q3 F) g5 W
{
& S# V2 p1 \1 j( B) N& c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% l; g. B0 ~) `. q$ D) `, P
i++;
1 ], k7 h) |9 U
//if(i >= 4096)
5 n+ Z5 J. k* O* p
// break;
* W' [: ~* q7 m9 p
8 d; p& V' s( I/ u
}
4 M' F, X+ O. K! n
UARTPuts("\n",-2);
. K, g$ H' ]2 Y0 C0 b3 ?" ^5 A
}
: S) a1 W5 ]+ Z- y5 u
}
- D3 G1 c/ Q* x4 f- m' R" h9 c
6 _9 x& S4 E/ s$ g" [
}
% F- ?9 [4 s2 v5 F
4 J: c& p: W$ p$ u7 E0 p# p9 J4 @
0 X& Y/ ?: _ G8 e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. g5 l* ?+ Q z3 ~. u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* s# _; w: u5 D$ _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4