C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6121|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 h. r2 d2 k' h& T$ u9 l( {) qmain文件:
5 T8 B5 A9 J8 iinterrupt void interrupt4(void)  
' i+ w2 A, K+ N/ F{' k! w- Y+ f3 j. G8 p/ @& {5 S
  Uint32 sample;
- I! o+ p' J! c
( S8 Z. P  D" V) N  sample = input_sample(); // read L + R samples from ADC
! R' Y5 E, h9 O' p9 ]# w0 o  output_sample(sample);   // write L + R samples to DAC
) _' Y8 O  Y; s1 u  return;
, Q3 F* G8 l" j# H}
6 [: t+ D, o1 w. c) _6 U. M9 X2 e2 p
int main( void )) [; U0 t3 B' Y% |# c# {- @
{
$ G* U5 \9 N8 b. A- L, M8 d. _" N
! H3 N2 e1 b8 c4 W0 a) n    /* Initialize BSL */2 o6 {' ?) w( d8 z
    EVMC6747_init( );$ ]1 ^! ?- h4 I! k; {# m  @
        /* Call evmc6747_intr function */
8 E2 ?5 H  i9 D8 S  m    aic3106_init( );2 G( s$ K  {' I; g/ O0 [# Q
        while(1);
/ M9 V% H3 k1 w9 ]1 x9 ]: m1 q4 _}
  }' n: P/ G& q$ }7 p% ?) E4 p
( b& A  X: [6 s$ G
6 G7 ~8 ^- h4 X. g5 vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 F% M) v; y9 O1 Y$ O# q: e/* Initialize MCASP1 */
! D) y1 d- R( C) p    mcasp = &MCASP_MODULE_1;
1 S0 b/ C  Z* h9 t% q. j$ S) u6 c    mcasp->regs->GBLCTL  = 0;       // Reset& v* S1 @4 ^* V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' K8 ]: p9 Z+ A8 ]    mcasp->regs->XGBLCTL = 0;       // Reset TX
. H' @) {1 o1 f( Z% }2 N4 |6 a    mcasp->regs->PWRDEMU = 1;       // Free-running; U9 X% Q) d" G* R# c9 _9 [+ [
   // configure McASP0 receive registers0 M; |2 L; ^1 I, v% T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* F4 w; K( ?- U! _* u  ^/ Y* c1 f    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ~4 [/ B0 _, T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 q$ |0 I/ S" N: h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 G9 I: ]( k% R; ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 [/ N- g5 P+ }$ E. ~8 O* g5 s* }    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: A- ]# |+ Q% Z* E    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 c, U6 g1 z: P; l3 r& X% B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* a; V( d9 \. m) ^! R% R

$ _! V, y, s; r  @" v0 j* f! z! {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- N3 y8 t, s3 g1 A, S0 a9 q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! z3 ^2 @+ O' f( y( L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 s# v' c3 `! R( J4 e4 m! p4 l( a+ {) e
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 k, Q: N! p8 ^2 C9 D, r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; w7 k" Z# [1 C7 g% G% W6 e% W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! I! {5 X$ t, w# F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: S! ~- ^, D5 o( W; d. \! j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  c+ Q0 y! R/ q5 O# @
, ^( c+ P3 L; j3 N2 \4 d1 ^4 y$ X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 O1 _& Z+ `" j2 A$ d" {    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 m2 ?8 `# g  y' {    mcasp->regs->PFUNC      = 0;          // All MCASPs* Q( o+ t+ @4 B0 M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  ]1 u3 P, n# p; d" ]9 h. g
, ]6 \( A* l0 ]4 t    mcasp->regs->DITCTL     = 0x00000000; // Not used
# W' q# ^  D2 L3 {" I5 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( A5 H, _2 e- _/ P* Y- W! {    mcasp->regs->AMUTE      = 0x00000000; // Not used8 K+ k! g3 |7 X) n! T& o% f

) i9 n1 @) T: x% k/* Starting sections of the McASP*/5 j, @" P3 }) @# i1 e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 a% N- T) n" A$ W4 o- ~  s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; @4 F' e6 s9 ]# s# }' I- b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. m, o: h& u0 l7 r$ ?6 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& c+ w& m( \' E9 Z( ~& v

4 V% l3 T1 n2 x" Z2 v    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! O# ?8 i; _. c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 ?; x# X* P& k/ ?% _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) @- H9 b8 m( @- L5 i9 Y5 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 z" e- ]# G2 B
, j1 d( p5 h+ l: [    mcasp->regs->XSTAT = 0x0000ffff;
# f; I1 `. _- u  l* v  `    mcasp->regs->RSTAT = 0x0000ffff; - d9 n, T7 [- j! W2 P! M* s
/ l! q/ s: l1 E% F9 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% i- e" O, N! z. I+ v  W! o" J8 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ m+ g& l: b* N  ]    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 M' G- W& |: O  a, ~+ j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ I* u$ N2 R; u# {# M3 K
9 x/ r& d! L1 Q. F    /* Write a 0, so that no underrun occurs after releasing the state machine */1 o- O! b( s/ C2 X/ U
    mcasp->regs->XBUF5 = 0;: ^7 K, H0 M( T9 x- r
    mcasp->regs->RBUF0 = 0;
* M$ E0 H$ G7 y' x# C
8 ]3 H3 V+ T. f: a' Y, ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  V( G: Z. i  A8 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 X4 M& B3 x  T/ I/ m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' P0 ]5 v- U) c3 ~  r( [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- a! u& j: N4 Y5 ^  s/ V9 g. k# p/ X* ]. r3 G
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 t4 y8 l* S: _# J) p0 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: T0 P5 n8 {, X5 B2 K- W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 N" N: D- p9 u  U1 O' [& Y( A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; m! I+ R; |( v

$ p+ h. ^. |' D4 m/ U5 {    CSR = 0x0000;
0 D6 L* y- s$ q$ B& n, J    INTC_INTMUX1 = 0x3d;, N. w/ E5 o3 y
    ISTP = (unsigned int)vectors;
& ~# Y) L" T$ b: y    ICR = 0xFFF0;  * A' X/ L, p' E' f% t
    IER |= 0x12;  ) c. l" }6 j: y2 K8 v7 m$ l! K
    CSR |= 0x01;  9 t" O: S* R# u; C

/ H! n5 @# l+ _" J: `+ f$ a5 b- Z; H  ?; M& w$ ]+ N
+ O  M% n5 z% J5 W" l  V$ v/ M
还有就是两个输入输出函数:, T  \& c) f6 s' g  _( ~& L
void output_sample(Int32 out_data)
; g# k# h7 A3 }) ^. m; g{: g: p0 x; B) {
  AIC31_data.uint = out_data;  6 [5 J/ }2 m: k0 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 W( h5 v- o- t% q- _2 c- r
}5 \5 B9 K& d/ [$ {7 ^

7 V1 k. n) x  L' X- l  pInt32 input_sample(void)/ K. G4 O. k7 ^8 k
{  2 s* K4 d$ C: y, f" ]2 N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ Q3 |* d' \3 l3 z# F& d4 U
  return (AIC31_data.uint);$ o6 D/ o. t6 A6 M0 U7 P" r* b9 b
}
% g1 P, s  C" I
0 j! g1 Z+ R  V, g5 k1 i3 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-27 18:39 , Processed in 0.040675 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表