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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, n8 z5 A0 ~1 V9 s( B4 {. s/ V
main文件:6 T; u* C' |+ \: O3 L7 X
interrupt void interrupt4(void)  
' t' G' i  u; Q) i{
! C( n' y2 G8 s  Uint32 sample;
- d" ~1 }. m6 e
& c" q8 H9 E! p$ T3 q  L  sample = input_sample(); // read L + R samples from ADC
9 U& E7 _3 i7 A5 c: Y) o5 o4 l  output_sample(sample);   // write L + R samples to DAC $ v. D" {- T" l4 W% p- X
  return;8 d" y/ V6 W9 f
}6 J  V8 E& @# w
9 r2 I. W6 d0 _% N/ l0 n3 ?
int main( void )
+ a- S+ Q/ h! h5 Z0 S{
; Y; u) u0 v* B$ L/ f8 Z. K& Z/ c( ?
    /* Initialize BSL */
* Q% d0 L5 L, z, u" m* U9 \4 {+ o, \    EVMC6747_init( );
& B0 `" {& Y' Y; g        /* Call evmc6747_intr function */, Q6 R6 ?/ t1 e* Y/ h1 m# c  i! P
    aic3106_init( );; p: j9 k9 `: R2 W) q% z3 O
        while(1);  ^. u2 O1 t8 [
}6 _  }* y7 W7 j" B3 g" P

) d( s; E- B+ U$ u2 f9 o! G" P' ?0 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ Y6 y0 @1 F: [& }4 D
/* Initialize MCASP1 */# _$ b' w5 v$ X9 G' s
    mcasp = &MCASP_MODULE_1;
2 t1 |0 q; s9 a% G    mcasp->regs->GBLCTL  = 0;       // Reset
$ W- j" S) ]' ?    mcasp->regs->RGBLCTL = 0;       // Reset RX+ F( N4 K& J& V- a0 p$ D' d% `6 E
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 v0 r  s0 L8 u  y- s    mcasp->regs->PWRDEMU = 1;       // Free-running
+ t6 _0 `, Y1 @2 F) Q/ \   // configure McASP0 receive registers
4 C" j$ ]1 l# D7 ]$ B3 j/ V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% [" e( p! b, U8 o( W. l& d    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 G9 u( c! G8 G; H. u, b    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 q8 ^" o( O" z; C1 m9 L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 z5 \. ?$ L( }
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" A3 v5 \# z- C0 G" I( |    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& l( P" p4 _0 P6 ~) E; I
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 L) D: N9 N2 \: d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 ?& S- Y2 {2 [% }3 Q
/ x7 V7 v" p6 G& g8 {/ C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  i  [/ O3 m8 K6 p, m# ^! |- m; @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ V: d* c9 {0 E. L& k/ e    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 l% p9 i7 y" Q* y& m, v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 d. P9 y8 I! S% e    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 l% n1 Y% y7 X9 e# _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 Y8 y6 Z* u7 ?+ y2 T  `! Z5 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 s* N/ K) G- z/ I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( t4 Z' r, a* S* o: D9 d# v* m, v. ?
! I0 ?! V: [+ Q" y. Q- N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 b9 U8 k3 ]5 W8 x5 ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) b% f- S8 B! _8 L; O( D
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* Y# v/ q! C4 ]  u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' T- w  g1 \# A3 k3 M/ D6 F- s* s
, E9 u& d5 H9 b$ B4 b& Z/ Q* o    mcasp->regs->DITCTL     = 0x00000000; // Not used5 ^. I3 e7 Z$ Y0 v. V2 x" r0 [% E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 W9 o. e% y' ?% ?4 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used/ x) _" p( E" t& Z7 \1 L$ ]

0 W7 R1 n: z& B/* Starting sections of the McASP*/  g$ c, K1 x4 i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! f+ f9 A  r; m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 X0 ^$ t* d3 d0 [5 V# ]- w. R
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) P+ v3 R! c( z# z. b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- x' E3 t( K9 [' n
* b. Q, S1 Y2 r$ c" @
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: q+ m0 J* Q% x+ z6 _0 _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 v* h" i7 E* T4 T" o. L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 M, ^: P2 _, j! h! @' u; W* q* D" J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& X  ?2 }3 n3 Q' x. ]7 H
( p* x0 Y$ k6 S7 i# i0 P2 e8 Z7 B* }
    mcasp->regs->XSTAT = 0x0000ffff;
7 w) M9 Y1 ?* V  c/ I    mcasp->regs->RSTAT = 0x0000ffff; 9 j2 I5 x% R( Q1 a0 f  r' k
2 {2 R9 \; X5 V) \; c
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* H8 q, y  ~* i- A' G$ L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: q& W3 r: x! `: S, Z" S
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! c* j# h3 B3 \7 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 u2 ]+ p) O; R0 j# @% d9 E

4 b: a9 b% K( g5 R0 J    /* Write a 0, so that no underrun occurs after releasing the state machine */$ O" x4 o$ k5 j8 H
    mcasp->regs->XBUF5 = 0;
7 d, T, ^+ u6 o3 v/ ]7 F7 L- N! O    mcasp->regs->RBUF0 = 0;
5 C/ z8 m  x* D) |4 a6 R) {( b3 W& g, O* w* c9 u5 i* n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) J2 Y6 l1 H% c8 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& z& x: }& r' @. S& t9 U9 u% g9 `    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " F6 o' k7 Z5 a1 E7 ]. t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" e: D, n' R  ~4 e

- c4 e# ~/ `4 I  l: L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; Z' A  h4 a3 G  M; B; J. M0 v4 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ~0 p2 g- K/ q3 u% K* @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' l. I; ]: g1 X" s% `0 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' U' f- P) q# U6 S& [% ^5 h

( ?8 u' w& x( k5 V7 t: [8 x1 w    CSR = 0x0000;
9 a* r8 N5 H: C# G2 R    INTC_INTMUX1 = 0x3d;# M" _" i1 R4 e- L  ?3 }" j
    ISTP = (unsigned int)vectors;
' l0 B7 E/ `5 t1 b' z    ICR = 0xFFF0;  1 Z" o2 C$ g/ m1 r0 N
    IER |= 0x12;  ' n, d! F' x# e
    CSR |= 0x01;  8 t5 c/ g+ F& T) U

" h; Z9 w2 h* `# l! [- e2 l# ~9 r8 ]2 M

& `/ {( k' e' R6 O2 t: t1 q' T还有就是两个输入输出函数:! F8 ^4 x! {( z9 K6 q# s0 q
void output_sample(Int32 out_data)
- b# O7 S8 Q" v{
# H* s+ h/ i. ?9 @* G; S* E2 l9 N  AIC31_data.uint = out_data;  9 m' y  `6 o2 Q: C& Q' K& U
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, Z# f0 A2 H- O; G
}
1 n9 s9 j& c' a, B" t+ m/ @8 Z$ f9 S1 q; c  ]. X' `7 _$ b
Int32 input_sample(void)
6 e- S$ S3 M4 o1 N4 d' m- h# a{  ! G* E4 @$ Z* S: x- {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 Q/ p0 R- p+ t: m
  return (AIC31_data.uint);8 M: x8 Z: G+ `
}; u& o& V9 q/ n; `. m7 g) x
2 Y7 p# O! _) ^6 C! `( D3 Z6 n
分享到:  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-30 14:58 , Processed in 0.049855 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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