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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: {  d# X! I  a0 M5 ymain文件:- P6 f# r& e( r% K) B
interrupt void interrupt4(void)  - c0 b& c0 j, h) b7 G
{
! Y5 |0 E- a; G2 N+ O3 K* I$ e  Uint32 sample;! M4 T4 T9 P  t1 k: y6 b

; p. E& v- B; T3 E+ H  sample = input_sample(); // read L + R samples from ADC" D  `# {" P/ Z% t
  output_sample(sample);   // write L + R samples to DAC 6 G/ d2 d4 ]1 e5 Q) I/ b3 C
  return;$ C0 n; w# p: V- {
}
* f2 A, W. C7 V1 c% K6 \% G$ l2 \
% ?) a. v' _* ~& ^& J. B+ zint main( void )1 a2 m. _' {  Z5 l$ n# B9 {( x3 s
{) q* [+ _2 s6 }5 X% i; _  N+ c

2 w5 N! c, x+ h9 p8 P  ]    /* Initialize BSL */
& F. ~# B1 }* q! E    EVMC6747_init( );$ M) P3 d4 c7 Y+ {3 G" {
        /* Call evmc6747_intr function */0 e8 b8 x2 q3 M( _6 o6 L, H3 P% B/ S; B
    aic3106_init( );
8 z0 e0 {$ j/ S8 S( [) k, Z$ P( ?5 d+ O        while(1);) Z  Q4 V, _" e8 u, ~
}2 A9 O( t# p1 p) Y, T

0 {+ a# m0 Z+ W& F/ o# o
& ~; t% {/ A; l7 g, \7 y  raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- ~. _. f2 O; B0 V
/* Initialize MCASP1 */
; m, H. c$ z" n) N+ K# G7 V. L    mcasp = &MCASP_MODULE_1;" @* f8 R/ ~! p2 M+ g. t; K& K
    mcasp->regs->GBLCTL  = 0;       // Reset
3 d3 {; y7 t  d9 W    mcasp->regs->RGBLCTL = 0;       // Reset RX
' p, b/ z- a9 D; D8 |, X6 U    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 G9 V6 I6 R$ j    mcasp->regs->PWRDEMU = 1;       // Free-running# S: {* n2 V; E/ Z, M7 s5 T
   // configure McASP0 receive registers: j- c: i% r2 a$ I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 t2 `* `1 z3 Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. R5 \, ~6 Q$ a* P6 n3 Q( s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& l2 L  Y# d, a7 T0 m  R& i
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 H5 e* I* l" L, z: c
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  N1 m; {* n, P* S9 |/ t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. X2 J4 H7 t4 f& q  n
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 _3 ^" m& Z, U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 t7 U2 t% |% i- V# i
9 ^. S$ p$ ^; h3 y/ \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 p/ w7 Y7 u2 m/ s7 ^/ l. ?9 `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 I! l% O/ A) b' P7 {
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. J% w5 S7 ^8 V    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 A* i! s: S9 u4 J* ^" w! Y+ S: A7 p
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ p1 A* A( ~' d) F    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' o0 Q' X, m( U* e- T. T& ], S1 s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: f5 }2 U  C+ H3 M
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ \1 K8 A& l4 x0 p' j5 j
& Z1 {8 l: F9 b! d7 L. M0 r  c# [
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( M4 ?! f* X' |+ |+ D' t% n# Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 t9 n! x/ ^& |+ S, `2 ^8 n    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 ~- o9 l. m( }2 c1 P" K: h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 A' a, L6 H% x+ U3 s# f
  ~8 _# E! D( M: j: z, A9 j    mcasp->regs->DITCTL     = 0x00000000; // Not used
" y) C9 s) V8 F! w$ H" R    mcasp->regs->DLBCTL     = 0x00000000; // Not used' g6 c) o) {0 M. |
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 _& M! k2 I& N' Z
% r1 u/ L  ]  z/ O7 F
/* Starting sections of the McASP*/
8 n! I& y4 t6 @( c2 P; t6 a3 A) }    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& j5 J5 i" x( z. Y9 `9 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 s; Y  r2 G( y* W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 ~* d" X0 ?& R2 r3 J& g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 `# C" B! i1 S" S- c0 t/ k3 R/ a' A% L; n' b% K/ B& y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) x! ^  U' K  d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 t% y4 n, G" V' f$ B( _    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 {# q9 Z" ^; i9 I" n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- R7 P; `- Y% C% z% }9 ~) E" D2 O" D
    mcasp->regs->XSTAT = 0x0000ffff;
1 R' R5 O5 \( ]7 U- f    mcasp->regs->RSTAT = 0x0000ffff; 1 A) I: U3 `7 {% C$ y3 S8 I
# H# S: {" s% ]" A, U2 K) _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, z) E" y0 R9 I0 a+ S9 z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 t. s$ d6 w: N0 l; B% k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 E' u5 p3 s/ E4 y( t6 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 Y1 y% g! b: V) G) P% q  e3 j7 g/ a) x: E& m0 y1 e8 a
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  D! R: v9 X$ S* l    mcasp->regs->XBUF5 = 0;
* r3 Z  _' d6 _  S5 W# C    mcasp->regs->RBUF0 = 0;$ m' ]7 F5 Q9 c8 D

* ?  j8 T" ^9 K2 E9 @( a9 W( h( u    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / g2 e2 \4 b8 A0 A+ x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 T  m: t: R/ s4 f8 }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 s$ p: A4 G9 C* G* Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 I5 T- Q; l" J) L. q8 V* W  C$ e+ n0 q6 N" c. z' t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 c2 N* }& }5 k" C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) D# N  Q! f: T) `- x- D8 H: W9 F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T0 x0 S# I' s- q: m% F! n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 l( k$ }, W7 C( {
- c' I+ X/ v3 `( z; @: x
    CSR = 0x0000;6 y1 v. |6 S+ F
    INTC_INTMUX1 = 0x3d;
- p6 c2 K( p6 q# P- t3 Q    ISTP = (unsigned int)vectors;9 v( V7 G3 [. C% r1 l/ f
    ICR = 0xFFF0;  
9 H/ `/ W. Y! P' S% Z1 r  z    IER |= 0x12;  % o) a; K& p# a2 m) L$ o- \- z
    CSR |= 0x01;  5 ^3 K! e7 Y$ Q; p, `5 L" X
: R: |/ S2 {, m- t: X' {8 g$ C
& D# \  B8 L- ?9 B
# N3 \0 s( @) O, u; Q
还有就是两个输入输出函数:
( F2 ]& x* T  o$ jvoid output_sample(Int32 out_data), D3 w& l9 l- d* J3 U9 d
{' |/ p# a1 m3 P3 Z- C3 ~
  AIC31_data.uint = out_data;  1 T& w2 O, |6 z/ H% p7 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( u/ K# P$ y# s  o" M7 u
}
6 Q% w: o) s7 L. @1 A' e" R/ X" P# L3 }( s8 s) _& t
Int32 input_sample(void)$ J$ c- K* X. ]/ O
{  
, }8 `6 U' W6 ]3 y5 J$ g  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 ^8 d# W$ p3 }3 i5 K/ S, _
  return (AIC31_data.uint);
0 L* P# z, @( h4 x}- s/ ?$ S0 ?' z/ m: T
: K0 L5 b4 U4 _9 E. S
分享到:  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-2-18 02:42 , Processed in 0.041809 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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