嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ f) p& A6 R# Q
Void UPP_TASK(Void)
2 Q' Y. B, ]% D) b# R# `8 Y! D( Z
{
7 V9 t8 S2 v2 |( ^) ]' H
3 o; @- V: g3 k; D3 M9 t
int i,j,k,target_int_count=2;
( a# }' m4 r" s4 z4 R9 s
char ch[2];
1 l, u% I. Q; ]
) I R9 l1 T i6 k
+ w _8 X1 l/ b
2 f3 s0 V5 l$ ~, F$ x
upp_interrupt_count = 0;
/ u. s4 c- e, s: Q" ^1 `$ r
upp_error_count = 0;
5 y2 L6 C% x8 f; K
3 [$ v( G# ]% e' p! G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! u% d- M8 A# X* g
// Initialize data buffers
, d" a; E' J; w: b$ _# O A6 P
for (i = 0; i < upp_frame_size; i++)
7 y5 _$ P$ A+ _0 h- c& B
{
) H* W, _( k& i
upp_buffer_b
=i;
- E4 E9 w, ^ r+ @* ^% K( U: k8 k
upp_buffer_a
= 0xDEAD;
7 ]. ^( d4 T" ]5 \, H
}
" L8 |; R/ X1 W7 o2 q2 |
) l5 j1 Z+ Z q* S/ K4 K' g, ]
//for(i=0;i<1024;i++)
0 [& I, c3 H* m, I. `) V% g
// temp
=0;
5 f1 @% r6 V {9 ~+ t) v
8 ^) ^ v2 |8 N' W+ Y' N4 z$ x& G
//UPPReset();
7 c+ Y- z7 w3 g% E& p. ?8 F: E
/*启动UPP DMA传输*/
/ h3 L4 ]: T* r' P; p8 U' d
UARTPuts("upp_prog_dma_i\n",-2);
. i% c" B$ |9 s: R% f! J5 a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% ?9 {) K: E7 d8 H' P
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' Q- N2 W1 |6 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
Z' u% Y' ?0 _7 Q5 l) q1 a6 X
8 ^$ m1 w" p" q
UARTPuts("upp_prog_dma_i\n",-2);
6 k& f8 V: { R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( S: F' w) h% p* e8 O, n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 I# L; U! z8 l" O/ L7 U; }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 F# w$ h+ k6 m( O* F. l
( }5 p, ^ n3 v6 ]9 G
/*等待UPP传输完毕*/
; o) o7 x/ s6 J. v" P3 h3 P1 `
//i=0;
- r: M. r" g. D* r
//j=0;
1 c4 l3 z# k t+ w" L- e5 `/ k W! H: ?9 ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ G3 T* D y: n/ _, j. D
{
! {! u3 l* W* j/ b, A
/* 测试UPP传输的同时操作普通DDR数据
5 `+ c/ m/ d7 ?' J( [# h" K" G- [
temp
=i;
& K( Z O. U- F1 j
i++;
& s4 y- G7 ^- O7 e
if(i==1024)
( R$ L$ m9 Z, [0 U) q
{
. \0 p, k8 O4 U7 M L( ^7 r7 N
i=0;
; v+ G5 L8 B! {) C
j++;
# s9 j. g, {3 n3 F" |4 J, J
}
; K' ?: A1 I* f5 K8 U
*/
# m2 Y1 A2 h2 x' [3 K8 _
1 K# m: p5 j# f3 K' h
asm(" nop");
) @" \* ~1 T5 V' D: M$ w! `5 o* T9 B
. o0 D- y. V( ~ |% m7 f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 }7 S3 \; p1 C, f& `* \
}
, y; x( `! ^- E& R0 v. H3 B
4 l# T, @; J- w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( h3 D( O/ k7 d* _6 {2 I! A
//UARTprintf( "i=%d\n",i);
- \9 g& r: N+ {9 R+ Z
//UARTprintf( "j=%d\n",j);
. J( Q' `9 X: a9 x1 A9 z
UARTPuts("Data mismatch in buffers.\n",-2);
7 I: I$ d d% r; M0 K6 c
if (upp_interrupt_count == 2 && upp_error_count == 0)
! Z0 M6 e! [4 I. r; r; F
{
7 F" R; e% m& @- R: u& B& ^
for (i = 0; i<upp_frame_size; i++)
' F7 S6 k) \; o# \/ w( T. G0 d
{
& N. M& y. B- R# ]5 }+ v8 b5 o0 F
if (upp_buffer_a
!= upp_buffer_b
)
, s( H; ~3 c! c# I2 M
{
% H; m4 O. \' C5 y1 \# S
upp_error_count++;
0 b2 [; h7 p7 ]! b) W6 H# J
}
. V& N! ?5 c$ v Y9 b' N) W
}
6 _8 K) Z+ Y1 Y' l; \; D; R
}
/ t W% a. n0 Z x% Z
, M* E9 x& G) \8 L3 m) b
/* 报告通信结果*/
( O' X4 }6 s. `$ A4 ]9 Q0 r7 _! d0 f
if(upp_error_count != 0)
5 W x6 o' W8 [: P8 Z' V) h% ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; E8 Z/ b$ o1 l6 |, ]/ _
else
' `9 Z) m$ R" K1 ]
UARTPuts("uPP transfers complete!\n",-2);
3 J: D8 d& F$ K0 N
8 v6 w$ n' X6 @/ O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( f9 Q, s% N4 e7 N, w5 C
UARTGets(ch,2);
3 r: n- L7 P# n/ r8 M8 {9 r
UARTPuts("\n", -2);
7 [, q3 ]# J) |& B4 y+ G
* P6 y' }# W$ }( J# _
if(ch[0] == 'y')
- K" t' n3 G3 ]- U p
{
; b" H& @0 z$ x4 `6 Z' o- }
/*打印全部读到的数据*/
& u& y0 t# A7 q$ k5 D# [; s
for(i=0; i<upp_frame_size; )
! u& c0 P6 h2 O/ D/ g/ }
{
- ~0 p# c6 v0 {! ^
for(j=0; j<5; j++)
# ~4 o9 l$ Y+ v) s+ }; h
{
( l- [+ v t3 y" l# x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* t- M) Y" E3 S$ f. k
i++;
1 D) z0 D2 r! v3 J- H F4 ~9 I& v: @+ `
//if(i >= 4096)
6 r' K% B! v+ V
// break;
# E/ V: H1 @! G I- W. T
2 M3 B! p. S8 R2 `
}
; Q- }" X2 W5 L5 j3 b# p
UARTPuts("\n",-2);
/ i3 Q8 z4 E7 Y+ T3 e) i4 T* u
}
- ]/ H& f$ S$ w
}
$ b$ s. M- R* P( ?; s" _
$ B1 \8 ?4 e) d0 R5 ?6 `! q* S
}
5 W5 ^. E/ U& |! J+ L9 M
( ?) t# m! w# K& q6 m
, V0 E" Z/ n5 P5 Z* ]7 u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" V- r6 A2 x, U5 Y7 ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 p' X& d* `5 c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4